需要帮助改变char*中的单个字符

nic*_*ick 3 c++ pointers

我正在回到c ++并掌握指针和诸如此类的东西,但是,我希望能得到一些帮助来理解为什么这段代码会给出总线错误.

char * str1 = "Hello World";
*str1 = '5';
Run Code Online (Sandbox Code Playgroud)

错误:总线错误:(

更一般地说,我想知道如何更改cstring中单个字符的值.因为我的理解是*str ='5'应该将str指向的值从'H'更改为'5'.因此,如果我打印出str,它会写着:"5ello World".

为了理解我也编写了这段代码片段,它按预期工作;

char test2[] = "Hello World";
char *testpa2 = &test2[0];
*testpa2 = '5';
Run Code Online (Sandbox Code Playgroud)

这给出了所需的输出.那么testpa2和str1之间的区别是什么?难道他们都没有指向一系列以null结尾的字符的开头?

Joh*_*nck 6

当你说char *str = "Hello World";你正在指向一个不可更改的文字字符串时.应该要求将文字分配给一个const char*,但由于历史原因,情况并非如此(oops).

当你说char str[] = "Hello World;"你正在创建一个数组,该数组被初始化为(并且由)编译时已知的字符串.这是可以修改的.


Chr*_*ung 5

没那么简单。:-)

第一个创建一个指向给定字符串文字的指针,允许将其放置在只读内存中。

第二个创建一个数组(通常在堆栈上,因此是读写),该数组被初始化为给定字符串文字的内容。