Предупреждение: назначение делает целое число из указателя без приведения [включено по умолчанию]

Мой код:

#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 эксперимент.c -o эксперимент

эксперимент.c: в функции 'main':

эксперимент.с:10:16: предупреждение: назначение делает целое число из указателя без приведения [включено по умолчанию]

Я старался numbers[i] = &(argv[i]); в строке 10. Все тот же результат.

3 ответа

Решение

Вы должны разыменовать argv дважды, чтобы получить значение char numbers[i] = *(*(argv + i));

В вашем коде numbers[i] имеет тип char, whereas, argv[i] имеет тип char * and both are not the same. That's why the warning is there.

Во втором случае numbers[i] = &(argv[i]); is also wrong, as &(argv[i]); тоже не char,

The bottom line is, you have a char указатель numbers and when you use indexing operator on it, you get the inidiviual elements as char, ie, all the numbers[i] имеют тип char, You need to assign another char значение для этого.

Это должно быть сделано так, как будто существует более 2 аргументов:

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);
Другие вопросы по тегам