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
从文件中读取的,我只是在调用它"名称测试"出于这个例子的目的。我想取字符串的第一个字,并将其指定为varName
中的Symbol
。那么应该发生的是newSymbol->varName
被设置为" Name"。由于strtok
返回char *
但我需要char[16]
结构,我必须将char *
转换为char[16]
。
然而,我收到此错误:
"Error: incompatible types when assigning to type 'char[16]' from type 'char*'
newSymbol -> varName = nameArray;
所以,似乎strcpy它实际上并没有将char *
转换为char[16]
。即使在声明char[16]
并告诉strcpy
将char *
的内容放入其中之后,我仍然有char *
而不是char[16]
。我需要在不更改结构的情况下使其工作,因此这不是一个选项。
如何将char *
转换为char[16]
?
答案 0 :(得分:2)
您无法使用C中的常规赋值运算符指定数组的内容。
您可以将strcpy
用于字符串,将memcpy/memset
用于其他数据类型。 (您也可以将memcpy/memset
用于字符串,但strcpy
更简单)
而不是
newSymbol -> varName = nameArray;
使用
strcpy(newSymbol -> varName, nameArray);
答案 1 :(得分:2)
所以,似乎strcpy它实际上并没有将char *转换为char [16]。
不,问题是C不提供分配给(整个)数组。 newSymbol->varName
是一个16 char
的数组。您可以分配该数组的元素,并可以使用strcpy()
或类似函数复制到该数组中,但不能分配给整个数组。
在您的特定代码中,我省略了变量nameArray
,更改此内容......
strcpy(nameArray,name);
......对此:
strcpy(newSymbol->varName, name);
(或者也许是strncpy()
的类似用法,以防止超出数组范围。)