我正在开发一个简单的文件系统,它(显然)包含文件夹,文件等。
一个(简化版本的)文件夹由一个结构表示,而在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]'时出现“不兼容的类型”。 据我所知,但不知道如何解决。
提前致谢
答案 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
(或等效的)。