c - 如何修改此结构中的字符数组 ~> C

标签 c

好的,我有一个结构

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/

相关文章:

c - 当我在增加指针后使用 strlen() 时会发生什么?

计算字符串文字的编译时连接

ruby 中的 char 转换在 C 中是不同的吗?

c - 递归结构的大小是多少?

c - RPn 处理负数除法

c - 当未知程序可能在不传递环境的情况下调用 execve 时如何使用 LD_PRELOAD 捕获调用

c++ - 为什么需要浮点指针或整型指针分别指向浮点型变量或整型变量?

c - malloc() 和 VirtualAlloc() 在 Windows 中分配内存时有哪些不同的属性?

c - 无法创建基于基本命令行参数的计算器

c - 处理2个不同大小的数组