我有一个 C 结构定义如下:
struct Guest {
int age;
char name[20];
};
当我创建一个 Guest
变量并使用以下代码初始化它时:
int guest_age = 30;
char guest_name[20] = "Mike";
struct Guest mike = {guest_age, guest_name};
我得到了关于第二个参数初始化的错误,它告诉我 guest_name
不能用于初始化成员变量 char name[20]
。
我可以这样做来初始化所有:
struct Guest mike = {guest_age, "Mike"};
但这不是我想要的。我想通过变量初始化所有字段。如何在 C 中执行此操作?
最佳答案
mike.name
是结构内部 20 字节的保留内存。 guest_name
是指向另一个内存位置的指针。通过尝试将 guest_name
分配给结构的成员,您尝试了一些不可能的事情。
如果必须将数据复制到结构中,则必须使用 memcpy
和 friend 。在这种情况下,您需要处理 \0
终止符。
memcpy(mike.name, guest_name, 20);
mike.name[19] = 0; // ensure termination
如果你有 \0
终止的字符串你也可以使用 strcpy
,但是因为 name
的大小是 20,我会建议 strncpy
。
strncpy(mike.name, guest_name, 19);
mike.name[19] = 0; // ensure termination
关于使用 char 数组的 C 结构初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18966979/