好的,我有一个结构
typedef struct contact {
char firstName[32];
char lastName[32];
char address[100];
char city[32];
char state[32];
char zipcode[10];
} Contact;
我需要让 firstName 的值等于“Herp”
我试过这样的事情:
int main(void) {
Contact contact;
contact.firstName = "Herp"; // I also tried the following line of code:
contact.firstName[] = "Herp"; // This doesn't work, and when I add a 0 to where the array needs to point, I get a syntax error.
}
任何帮助都会很棒。
最佳答案
您的结构将为每个实例的 .firstName
留出 32 字节的内存,对于其他 char[]
字段也是如此。
char[32]
缓冲区可以像一个 char*
指针变量一样被读取,但是如果你写 contact.firstName = "Herp"
就好像您正在尝试重新分配该字段的内存地址。但是你不能那样做 - 该缓冲区的地址相对于内存中整个结构的开始是固定的。
因此您必须将所需数据从原始字符串复制到缓冲区中。
在有限的情况下,您可以为此使用 strcpy
,但理想情况下您应该使用 strncpy
来确保您不会从一个字段溢出到另一个字段。
如果原始字符串的长度超过 32 个字符,请注意生成的缓冲区中可能没有终止 NUL
的可能性。
关于c - 如何修改此结构中的字符数组 ~> C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19365901/