gpt4 book ai didi

c - 修改单个结构成员

转载 作者:行者123 更新时间:2023-11-30 20:27:51 25 4
gpt4 key购买 nike

如何编辑结构体的单个成员?例如,我想将 entity.namefoo 更改为 foobar

部分代码:

void editing1(int cnt, int qq)
{
Entity z;
char tempc[255];
int tempi = 0;
cout << "Type in new name: ";
cin >> tempc;
qq--;
Entity* ss = new Entity[cnt];
while (fread(&z, sizeof z, 1, file)) {
ss[tempi] = z;
if (tempi == qq) {
(*ss[tempi].name = *tempc);
};
tempi++;
};

purge();
for (int ii = 0; ii < cnt; ii++) {
fwrite(&ss[ii], sizeof(Entity), 1, file);
};
fclose(file);
system("cls");
};

但我明白了:

snifty letters

而且它很好......损坏了整个文件。原文:

good little symbols

还有人可以解释为什么它会损坏整个文件而不是使用它的部分吗?

最佳答案

这里的这一行很可疑......

(*ss[tempi].name=*tempc);

请注意,ss 是一个指向 cnt Element 数组的指针——因此,如果您想访问 tempi 元素,正确的方法不是 (*ss[tempi]) 而是 ss[tempi] ——如果您尝试访问第一个name 属性的元素,然后 *ss[tempi].name 就会执行此操作。

但是,tempc 是一个 char 数组,没有数组索引,它是数组中第一个元素的地址。 *tempc 将是第一个字节中的单个字符。

问题是我不知道 ss[tempi].name 是什么,以便告诉您分配它的正确方法。这将是我的解决方案如果 name 是一个字符指针。

ss[tempi].name=tempc;

如果name是一个字符数组,你可能会想要这样的东西......

strncpy( ss[tempi].name, tempc, sizeof( ss[tempi].name ) );

*ss[tempi].namename 中的第一个字符 - 正如您所说,属性是 char name[255] - 因此,name 本身就是该数组中第一个字符的地址,而 *name 是实际的第一个字符。 *tempc 也是如此 - 因此,您将第一个字节从 tempc 复制到 name 就这样了。

此外,您不能通过分配数组来复制数组...

char array1[255] = "hello world";
char array2[255];

array2 = array1;

这是合法的C。您需要使用字符串副本来执行此操作,并且还需要防止缓冲区溢出,因此您可以这样做...

char array1[255] = "hello world";
char array2[255];

strncpy( array2, array1, sizeof( array2 ) );

关于c - 修改单个结构成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16429118/

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