gpt4 book ai didi

char 指针在两种不同情况下的行为不同

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

我愿意

char ch = 'c';

然后

char *char_ptr = &ch;
*(char_ptr+1) = 'h';
*(char_ptr+2) = '\0';

当我使用

打印它时,它可以正常工作
printf("char_ptr as string = %s\n", char_ptr);

但是当我这样做的时候

char *char_ptr = 'c';
*(char_ptr+1) = 'h';
*(char_ptr+2) = '\0';

然后它会导致段错误。这背后的原因是什么?

最佳答案

'c' 是一个整数常量,在 ASCII 系统下,其计算结果为 0x63

那个,以及紧随其后的地址,几乎肯定会成为开始向其中插入信息的无效地址。

事实上,即使是第一个也是未定义的行为,因为 ch 只分配了一个字符,而您正试图更改超出该字符的信息。它可能的工作取决于您的编译器如何布局内存和堆栈帧,但这仍然是一个非常糟糕的主意。

更正确的做法是:

char char_ptr[3] = "c";    // Allocate three bytes to ensure room.
*(char_ptr+1) = 'h'; // or char_ptr[1] = 'h';
*(char_ptr+2) = '\0'; // or char_ptr[2] = '\0';

关于char 指针在两种不同情况下的行为不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19673378/

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