gpt4 book ai didi

c - 结构与字符串文字?只读还是读写?

转载 作者:太空狗 更新时间:2023-10-29 17:01:41 25 4
gpt4 key购买 nike

C99 标准是否允许写入复合文字(结构)?它似乎不提供对文字字符串的写入。我问这个是因为它在 C Programming: A Modern Approach, 2nd Edition 中说在第 406 页上。

Q. Allowing a pointer to a compound literal would seem to make it possible to modify the literal. Is that the case?

A. Yes. Compound literals are lvalues that can be modified.

但是,我不太明白它是如何工作的,以及它如何与您当然无法修改的字符串文字一起工作。

char *foo = "foo bar";
struct bar { char *a; int g; };
struct bar *baz = &(struct bar){.a = "foo bar", .g = 5};

int main () {
// Segfaults
// (baz->a)[0] = 'X';
// printf( "%s", baz->a );

// Segfaults
// foo[0] = 'a';
// printf("%s", foo);

baz->g = 9;
printf("%d", baz->g);

return 0;
}

您可以在我的段错误列表中看到,写入 baz->a 会导致段错误。但是,写入 baz->g 不会。为什么其中一个会导致段错误而不是另一个?结构文字与字符串文字有何不同?为什么不将结构文字也放入内存的只读部分,并且这两种行为是否已定义或未定义(标准问题)?

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