Так я это код, который я сводились поэтому его единственной целью является показать меня проблема:Почему я получаю предупреждение «int-conversion», когда я назначаю значение члену массива строк в инициализаторе структуры?
typedef struct _TEST {char strarr[3][20];} TEST;
int main(int argc, char *argv[]) {
char strarr[3][20] = {"some", "test", "strings"};
TEST test = {.strarr=strarr};
return 0;
}
Когда я пытаюсь скомпилировать я получаю это предупреждение:
$ gcc test.c -o test
test.c: In function ‘main’:
test.c:6:26: warning: initialization makes integer from pointer without a
cast [-Wint-conversion]
TEST test = {.strarr=strarr};
^
test.c:6:26: note: (near initialization for ‘test.strarr[0][0]’)
Я пробовал приходить в сообщение об ошибке, но результаты, которые я получаю, это все люди, которые неправильно используют указатели. Я не думаю, что неправильно использую указатели. Я не думаю, что на самом деле я даже использую указатели в этом коде, но я довольно новичок в C, и все еще есть много вещей, которые я действительно не понимаю (как они работают или почему они так неинтуитивны) , Особенно со струнами.
Я также пробовал разыгрывать различные фразы по строкам «присваивание строкового массива в инициализаторе структуры», но ни один из результатов, которые я нашел, не имеет отношения к моей проблеме.
I did find something maybe relevant when I searched "near initialization for." Хотя это не относится к моей проблеме, я нашел полезную информацию: они получили предупреждение, потому что они неправильно инициализировали переменную. Но я не знаю, что я делаю неправильно.
Я думаю, что настоящий вопрос заключается в том, почему это вообще компилируется для вас. 'char [3] [20] strarr;' недействителен C, и все версии gcc я могу найти прямо сейчас на нем ошибку, как и следовало ожидать. Правильной декларацией C будет 'char strarr [3] [20];'. Вы действительно уверены, что код, который вы опубликовали, - это точный код, который вы компилируете? – Dolda2000
Поскольку правая сторона 'strarr' рассматривается как указатель, такая инициализация невозможна. Вместо этого используйте 'memcpy'. – BLUEPIXY
или 'TEST test; test = * (TEST *) strarr; ' – BLUEPIXY