C argv指针类型

时间:2014-09-20 07:07:16

标签: c++ c pointers argv

我对如何使用指针让这段代码起作用感到困惑:

#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]

3 个答案:

答案 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。