0

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

一个(a 的简化版本)文件夹在 RAM 中由一个结构表示,如下所示:

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

现在,我显然希望标签包含其中包含名称的原始字节字符串(更好的是不带尾随 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

4 回答 4

4

使用strncpy()

char name[20] = "name";
strncpy(myFolder->label, name, sizeof(myFolder->label) - 1);
myFolder->label[sizeof(myFolder->label) - 1] = 0;
于 2012-11-07T16:11:55.677 回答
2

尝试使用strncpy()

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

代替

myFolder->label = "name";

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

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

于 2012-11-07T16:12:50.733 回答
1

您需要使用strcpy

strcpy(myFolder->label, "name");
于 2012-11-07T16:11:57.283 回答
1

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

  • 声明label为指向char;
  • 使用strcpy(或等效)。
于 2012-11-07T16:12:48.347 回答