Предупреждение: назначение делает целое число из указателя без приведения [включено по умолчанию]
Мой код:
#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);