使用 char 数组的 C 结构初始化

标签 c struct char

我有一个 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/

相关文章:

c - 这个 __VA_ARGS__ 扩展有效 c99 吗?

c - 按值或按指针传递和返回结构 - 是否有默认指南?

validation - 在 Golang 中使用 OR 条件验证结构的两个字段

java - 为什么我需要初始化这个?

c - C : assignment makes integer from pointer without a cast 中的警告

C 逐字读取

C,简单的 if else 语句上的调试器断点

c - 如何分配内存并用指向二维数组的指针填充结构

c++ - 如何检查普通字符是否已签名或未签名?

c++ - 对于有保证的单个字符,使用 `char` 还是 `string` 更好?