gpt4 book ai didi

c - 更改 char 数组元素时的未定义行为

转载 作者:太空宇宙 更新时间:2023-11-04 06:03:43 25 4
gpt4 key购买 nike

以下代码的第 9 行生成未定义的行为。这是因为 title1[]main() 之外并且是全局的吗?还是因为我缺少其他东西?

1. char title1[]="The Name of the Rose";
2. Book book1={title1,900,0};
3. int main(){
4. Book book2={"Foucault's Pendulum",1000,0};
5. Book* book3=(Book*)malloc(sizeof(Book));
6. *book3=book2;
7. book1.next=&book2;
8. book2.next=book3;
9. book1.title[0]='B';
10. book2.title[0]='A';
11. {
12. Book list[2];
13. list[0]=book1;
14. list[1]=book2;
15. list[1].next->next=&book2;
16. {
17. Book* p=&list[0];
18. while (p!=0) {
19. p=p->next;
20. }
21. }
22. return 0;
23.}

编辑:

添加了 Book 定义:

‫;‪struct Book‬‬
‪typedef struct Book‬ {
‫;‪ char* title‬‬
int pages;‬‬
‫;‪ struct Book* next‬‬
‫;‪} Book‬‬

最佳答案

不,第 9 行不是未定义的行为。它写入这个数组:

char title1[]="The Name of the Rose";

这不是字符串文字(但由一个初始化)。这样的普通数组可以根据您的喜好进行修改。如果您这样声明它,情况就会有所不同:

char *title1="The Name of the Rose";

未定义的行为在第 10 行,这里你正在写入一个字符串文字,这是不允许的。

顺便说一句,在这里提问时,请将其简化为一个能表明您的观点的最小示例。您发布的大部分代码对您的问题完全没有用。

关于c - 更改 char 数组元素时的未定义行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14650237/

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