che*_*oot 0 c string segmentation-fault
#include <stdio.h>
#include <conio.h>
void test(char *p)
{
p = p + 1;
*p = 'a';
}
int main()
{
char *str = "Hello";
test(str);
printf("%s", str);
getch();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,它会给出分段错误?为什么会发生这种情况.const理论对我来说并不清楚......如果我将str声明为char str [],那么它就完成了工作.它们不是基本相同的东西吗?
str指向字符串文字,您试图test在此行的函数中修改字符串文字:
*p = 'a';
Run Code Online (Sandbox Code Playgroud)
它是undefined behavior尝试修改字符串文字.或者,您可以将字符串文字的副本复制到数组中,如下所示:
char str[] = "Hello";
Run Code Online (Sandbox Code Playgroud)
现在完全可以修改str.从draft C99 standard下部分6.4.5 String literals段6:
如果这些数组的元素具有适当的值,则这些数组是否不同是未指定的.如果程序试图修改此类数组,则行为未定义.
*p = 'a';
Run Code Online (Sandbox Code Playgroud)
问题是上面的语句试图修改只读段.字符串文字"Hello"位于只读段中,无法修改.
char str[] = "Hello";
Run Code Online (Sandbox Code Playgroud)
上面的语句复制Hello到str字符数组,可以修改数组内容.
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |