警告:赋值在没有强制转换的情况下从指针生成整数[默认启用]

时间:2016-03-29 03:23:37

标签: c pointers char

我的代码是:

#include <stdio.h>
#include <stdlib.h>

int main (int argc, char *argv[]){
    int i = 0;
    int count = argc - 1;
    char *numbers = malloc(count * sizeof(char));
    for(i = 1 ; i <= argc ; i++){
       printf("%s ", argv[i]);
       numbers[i] = argv[i];
    }
    printf ("%s \n", numbers);
    return 0;
}

出现的错误是:

  

tamal @ baba-desktop:〜/ Desktop / c $ cc experiment.c -o experiment

     

experiment.c:在函数'main'中:

     

experiment.c:10:16:警告:赋值从指针生成整数   没有演员[默认启用]

我在第10行尝试了 numbers[i] = &(argv[i]); 。结果仍然相同。

3 个答案:

答案 0 :(得分:1)

在您的代码中,numbers[i]的类型为char,而argv[i]的类型为char *且两者不同。这就是警告出现的原因。

在第二种情况下,numbers[i] = &(argv[i]);也是错误的,因为&(argv[i]);也不是char

最重要的是,你有一个char指针numbers,当你在其上使用索引运算符时,你会得到char的个体内容,即所有{{1}属于numbers[i]类型。您需要为其指定另一个char值。

答案 1 :(得分:0)

您必须取消引用argv两次以获取char值numbers[i] = *(*(argv + i));

答案 2 :(得分:0)

应该这样做,好像有两个以上的参数:

int count = argc - 1;
char **numbers = (char **)malloc(count * sizeof(char*));
for(i = 0 ; i < argc ; i++){
   printf("%s ", argv[i + 1]);
   // Stores all arguments except "experiment"(i.e. exe file).
   numbers[i] = argv[i + 1];
}
for(i = 0; i <= count; i++){
   printf("%s\n", numbers[i]);
}

如果只有两个论点那么它应该简单地完成:

char *number = (char *)malloc(1*sizeof(char));
// Store argument other than provided .exe file i.e. "experiment"
number = argv[1];
printf("%s\n", number);