typedef struct Symbol{
char varName[16];
} Symbol;
...............
Symbol *newSymbol = malloc(sizeof(Symbol));
const char space[2] = " ";
char *String = "Name Test";
//break off the first word from String and put it into name
char *name;
name = strtok(String,space);
//convert the char * to char[16]
char nameArray[16];
strcpy(nameArray,name);
//set newSymbol->varName to the newly created char[16]
newSymbol->varName = nameArray
У меня есть char *
под названием String
. В моей реальной программе она считывается из файла с использованием fgets
, я просто называю это «Test Name» для целей этого примера. Я хочу взять первое слово строки и назначить его как varName
в Symbol
. Итак, что должно произойти, newSymbol->varName
настроено на «Name». Потому что strtok
возвращает char *
, но мне нужен char[16]
для структуры, я должен преобразовать char *
в char[16]
.Strcpy from char * to char [] создание неправильной формы
Однако, я получаю эту ошибку:
"Error: incompatible types when assigning to type 'char[16]' from type 'char*'
newSymbol -> varName = nameArray;
Таким образом, кажется, как зЬгсру это не на самом деле преобразования char *
в char[16]
. Даже после объявления char[16]
и сообщения strcpy
, чтобы поместить в него содержимое char *
, у меня все еще есть char *
вместо char[16]
. Мне нужно заставить его работать, не меняя структуру, так что это не вариант.
Как можно преобразовать char *
в char[16]
?
Hmmm 'char * String =" Name Test "; ... name = strtok (String, space); 'выглядит iffy, пытаясь изменить строковый литерал, я думаю. – chux
Вы совершенно правы, @chux, но я принимаю это за ошибку, которую OP представил в процессе сокращения его исходного кода до примера, который он представил. –