C结构成员是一个字符串,如何直接分配字节

时间:2012-11-07 16:10:27

标签: c string struct

我正在开发一个简单的文件系统,它(显然)包含文件夹,文件等。

一个(简化版本的)文件夹由一个结构表示,而在RAM中就像这样:

typedef struct{
     char label[20];
     unsigned int id;
     t_node contents[50];
 } folder;

现在,我显然希望label包含原始字节字符串,其中包含名称(更好的是原始字符串,而不是尾随0,但这是我愿意做出的牺牲)。

不,这是我创建和使用结构的方式:

folder* myFolder = (folder *) malloc(sizeof(folder));
myFolder->label = "name";

//Which doesn't work, if I try this:

char name[20] = "name";
myFolder->label = name;

//this too, doesn't work.

错误消息显示“从类型'char *'”分配类型'char [20]'时出现“不兼容的类型”。 据我所知,但不知道如何解决。

提前致谢

4 个答案:

答案 0 :(得分:4)

使用strncpy()

char name[20] = "name";
strncpy(myFolder->label, name, sizeof(myFolder->label) - 1);
myFolder->label[sizeof(myFolder->label) - 1] = 0;

答案 1 :(得分:2)

尝试使用strncpy()

strncpy( myFolder->label, "name", 20 );

而不是

myFolder->label = "name";

您不能使用赋值运算符来填充数组,在这种情况下,“name”的右侧将解析为char指针。

另外我建议用一些定义的常量替换常量20,指示值是什么(即MAX_FOLDER_LABEL_LEN)。

答案 2 :(得分:1)

您需要使用strcpy

strcpy(myFolder->label, "name");

答案 3 :(得分:1)

数组不是可修改的左值,因此您无法为其赋值。你有几个解决方案:

  • label声明为指向char的指针;
  • 使用strcpy(或等效的)。