从char *到char []的strcpy创建错误的表单

时间:2016-03-31 20:24:20

标签: c string

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]并告诉strcpychar *的内容放入其中之后,我仍然有char *而不是char[16]。我需要在不更改结构的情况下使其工作,因此这不是一个选项。

如何将char *转换为char[16]

2 个答案:

答案 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()的类似用法,以防止超出数组范围。)