我一直在用 c 语言对字符串进行试验。
在这段代码中。
#include<stdio.h>
int main()
{
char *arr="output";
*arr='s';
printf("%s",arr);
return 0;
}
字符串“output”在内存中的什么位置被创建,并且我们有指针 arr(驻留在堆栈中)最初指向该字符串,为什么不能将其他一些字符分配给该指针?
当我尝试运行这个程序时,我看到运行时错误信号:11 这是段错误。
我了解到,在 C++ 中,字符串“输出”在只读内存中创建,这会导致在编译过程中“不推荐使用从字符串常量到‘char*’的转换”。C 中的行为是什么?
有人能解释一下为什么这会导致段错误吗?这个字符串“输出”首先在哪里创建。
谢谢。
Where in memory does the string "output" get created
数组本身是静态的。不确定它是否与具有相同内容的其他字符串文字数组位于同一位置。
why is it not possible to assign some other char to the pointer?
这样做会产生未定义的行为。
Can someone explain me why this causes segmentation fault?
许多实现将字符串存储在写保护的内存中,因此如果您尝试这样做就会出错。请注意,在现代 C++ 中,转换为 char*
(而不是 const char*
)不仅被弃用而且被禁止。
What is behaviour in c?
与在 C++ 中一样,尝试修改文字是未定义的行为,并且两种语言均未指定实现细节。我对 C 有点过时了,所以我不知道这些天是否允许、弃用或禁止向 char*
的狡猾转换。