sta*_*k92 2 c c++ arrays string
我一直在尝试c中的字符串.在这段代码中.
#include<stdio.h>
int main()
{
char *arr="output";
*arr='s';
printf("%s",arr);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在内存中,字符串"output"被创建,并且因为我们有指针arr(位于堆栈中),它最初指向此字符串,为什么不能为指针分配一些其他字符?当我试图运行这个程序时,我看到运行时错误信号:11这是分段错误.
我已经了解到,在c ++中,字符串"output"在只读内存中创建,导致在编译过程中不允许将字符串常量转换为'char*'.在c中的行为是什么?
有人能解释一下为什么会导致分段错误吗?这个字符串"输出"在哪里首先创建.
谢谢.
在内存中,字符串"output"被创建
数组本身是静态的.它是否与其他具有相同内容的字符串文字数组位于同一位置是未指定的.
为什么不可能为指针分配一些其他字符?
这样做会给出未定义的行为.
有人能解释一下为什么会导致分段错误吗?
许多实现将字符串存储在写保护的内存中,因此如果您尝试,则会出现错误.请注意,在现代C++中,转换为char*(而不是const char*)不仅被弃用,而且被禁止.
c中的行为是什么?
与在C++中一样,尝试修改文字是未定义的行为,并且未在任何一种语言中指定实现细节.我对C有点过时了,所以我不知道char*这些日子是否允许,弃用或禁止狡猾的转换.
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |