gpt4 book ai didi

c - 结构中的字符串。损坏的

转载 作者:行者123 更新时间:2023-12-05 08:59:55 25 4
gpt4 key购买 nike

有这样的结构

struct Address {
int id;
int set;
char name[MAX_DATA];
char email[MAX_DATA];
};

以及设置地址的函数。

void Database_set(struct Connection *conn, int id, const char *name, const char *email) {
struct Address *addr = &conn->db->rows[id];
if(addr->set) die("Address already set");

addr->set = 1;
char *res = strncpy(addr->name, name, MAX_DATA);
if(!res) die("Name copy failed");

*res = strncpy(addr->email, email, MAX_DATA);
if(!res) die("Email copy failed");
}

但是 addr->name 的第一个字符在这一行之后被破坏了。

*res = strncpy(addr->email, email, MAX_DATA);

有什么想法吗?

最佳答案

strncpy 在之后返回它的第一个参数

char *res = strncpy(addr->name, name, MAX_DATA);

变量 res 包含 addr->name(等价于 &(addr->name[0]))所以当

*res = strncpy(addr->email, email, MAX_DATA);

运行它相当于

addr->name[0] = strncpy(addr->email, email, MAX_DATA);

这个赋值破坏了 addr->name 的第一个字符。正如 Greg Hewgill 所说,您不需要检查甚至保存 strncpy 的返回值。

关于c - 结构中的字符串。损坏的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11173468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com