我对如何使用指针让这段代码起作用感到困惑:
#include<stdio.h>
int main(int argc, char *argv[]){
char* test = argv[1][0];
printf("hello %s\n", test);
}
这是错误:
incompatible integer to pointer conversion initializing
'char *' with an expression of type 'char'; take the address with &
[-Wint-conversion]
答案 0 :(得分:9)
argv[1][0]
的类型为char
。
argv[1]
的类型为char*
。
您需要使用:
char* test = argv[1];
如果您使用以下方式调用您的程序:
program "First Arguent" "Second Argument"
然后,在main
中,argc
等于3
。
argv[0] = "program"
argv[1] = "First Arguent"
argv[2] = "Second Arguent"
argv[3] = NULL
鉴于这种情况,
argv[1][0]
评估argv[1]
的第一个字符,该字符等于'F'
。
如果这是您想要的,您可以使用:
char test = argv[1][0];
如果你想获得整个第一个参数,那么你需要使用:
char* test = argv[1];
答案 1 :(得分:6)
第一个参数是argv[1]
,argv[1][0]
是该参数的第一个字符。将代码更改为
char* test = argv[1];
答案 2 :(得分:1)
char * argv []是一个指针数组,每个指针指向一个字符数组(以null结尾)。假设您将“Hello World”作为命令行参数传递给您的程序。 string(null终止字符数组)的基址存储在argv [1]中。由于argv [1]指向一个字符串,因此argv [1] [0]给出第0个字符 字符串中的索引。
现在考虑你的任务:
char* test = argv[1][0];
这里使用argv [1] [0],实际上是在由
指向的字符串内部索引
argv [1],并将存储在字符串第0个索引处的charcater分配给测试
指针。由于“test”是指针因此,它必然存储地址而不是值
上面的赋值分配一个字符值进行测试,因为字符是
内部表示为C中的整数,因此您会收到一条警告:
incompatible integer to pointer conversion initializing
这里整数值是指argv [1] [0],指针是test。
上述作业可用作:
char *test = &argv[1][0]; // assignment 1
相当于:
char *test = argv[1]; // assignment 2
只要赋值1中的索引为0。