如果argv []是一个指针数组,printf("%s",argv [])怎么办?

mko*_*mko 2 c pointers argv

在以下代码中:

#include<stdio.h>

int main(int argc,char *argv[]){
  int index;
  for(index = 0; index < argc; index++) {
    printf("The %d is %s\n",index,argv[index]);
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

从声明中char *argv[],cdecl说它意味着 declare argv as array of pointer to char,所以我认为代码应该这样写: printf("The %d is %s\n",index,*argv[index]);

如下代码:

void give_me_ptr(int *ptr){
  printf("the value of ptr is %p\n", ptr);
  printf("the value of ptr is %d\n", *ptr);
}

int main(void){
  int a = 10,index;
  give_me_ptr(&a);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

事实证明

the value of ptr is 0x7fff76010b48
the value of ptr is 10
Run Code Online (Sandbox Code Playgroud)

对我而言,这意味着我应该在指针变量之前添加*.

AnT*_*AnT 10

printf函数中,格式说明符%s需要指向字符串的第一个字符的指针作为相应的参数.这就是你传递argv[index]给它的原因.argv[index]是一个指针.

如果你通过了*argv[index],你只会传递argv[index]字符串的第一个字符,这是不正确的.%s需要指向第一个字符的指针,而不是字符本身.