我有一个C结构定义如下:
struct Guest {
int age;
char name[20];
};
Run Code Online (Sandbox Code Playgroud)
当我创建一个Guest变量并使用以下内容对其进行初始化时:
int guest_age = 30;
char guest_name[20] = "Mike";
struct Guest mike = {guest_age, guest_name};
Run Code Online (Sandbox Code Playgroud)
我得到了关于第二个参数初始化的错误,它告诉我guest_name不能用于初始化成员变量char name[20].
我可以这样做来初始化所有:
struct Guest mike = {guest_age, "Mike"};
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的.我想按变量初始化所有字段.如何在C中执行此操作?
Sco*_*tus 18
mike.name结构内部是20个字节的保留内存.guest_name是指向另一个内存位置的指针.通过尝试分配guest_name给struct的成员,你尝试了一些不可能的事情.
如果您必须将数据复制到您必须使用的结构memcpy和朋友.在这种情况下,您需要处理\0终结器.
memcpy(mike.name, guest_name, 20);
mike.name[19] = 0; // ensure termination
Run Code Online (Sandbox Code Playgroud)
如果你已经\0终止了字符串,你也可以使用strcpy,但是因为它name的大小是20,我建议strncpy.
strncpy(mike.name, guest_name, 19);
mike.name[19] = 0; // ensure termination
Run Code Online (Sandbox Code Playgroud)
mike.name是一个字符数组.您不能只使用=运算符来复制数组.
相反,您需要使用strncpy或类似的东西来复制数据.
int guest_age = 30;
char guest_name[20] = "Mike";
struct Guest mike = { guest_age };
strncpy(mike.name, guest_name, sizeof(mike.name) - 1);
Run Code Online (Sandbox Code Playgroud)
你已经将这个问题标记为C++,所以我想指出在这种情况下你应该几乎总是std::string优先使用char[].