以下代码的第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.}
Run Code Online (Sandbox Code Playgroud)
编辑:
添加了图书定义:
?;?struct Book??
?typedef struct Book? {
?;? char* title??
int pages;??
?;? struct Book* next??
?;?} Book??
Run Code Online (Sandbox Code Playgroud)
不,第9行不是未定义的行为.它写入这个数组:
char title1[]="The Name of the Rose";
Run Code Online (Sandbox Code Playgroud)
这不是字符串文字(但由一个字母初始化).这样的普通阵列可以根据自己的喜好进行修改.如果你像这样声明它会有所不同:
char *title1="The Name of the Rose";
Run Code Online (Sandbox Code Playgroud)
未定义的行为在第10行,在这里你写入一个字符串文字,这是不允许的.
顺便说一句,在这里提问时,请把它煮成一个显示你的观点的最小例子.您发布的大多数代码对您的问题完全没用.