需要帮助更改char*中的单个字符
need help changing single character in char*
我要回到c++,掌握指针之类的东西,但是,我希望我能得到一些帮助,理解为什么这个代码段会出现总线错误。
char * str1 = "Hello World";
*str1 = '5';
错误:总线错误:(
更普遍地说,我想知道如何更改cstring中单个字符的值。因为我的理解是*str='5'应该将str指向的值从'H'更改为'5'。所以,如果我把str打印出来,上面会写着:"5ello World"。
为了理解,我也写了这个代码片段,它按预期工作;
char test2[] = "Hello World";
char *testpa2 = &test2[0];
*testpa2 = '5';
这将提供所需的输出。那么testpa2和str1之间有什么区别呢?它们不是都指向一系列以null结尾的字符的开头吗?
当您说char *str = "Hello World";
时,您正在制作一个指向不可更改的文字字符串的指针。应该要求将文字分配给const char*
,但由于历史原因,情况并非如此(oops)。
当您说char str[] = "Hello World;"
时,您正在生成一个数组,该数组在编译时被初始化为已知的字符串(并由其大小确定)。这可以修改。
不那么简单。:-)
第一个创建一个指向给定字符串文字的指针,该指针可以放在只读内存中。
第二个创建了一个数组(通常在堆栈上,因此是读写的),该数组初始化为给定字符串文字的内容。
在第一个示例中,您试图修改字符串文字,这会导致未定义的行为。
根据2.13.4.2中的语言标准
是否所有字符串文字distinct(即存储在不重叠对象)实现定义试图修改字符串文字未定义。
在第二个示例中,您使用了字符串文字初始化,定义见8.5.2.1
字符数组(无论是纯字符,有符号字符或无符号字符)可以是由字符串文字初始化(可选择用括号括起来);一wchar_t数组可以通过宽字符串文字(可选封闭在支架中);连续的字符串文字的字符初始化的成员大堆
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 为什么char不是单个字符
- C++ 字符串单个字符
- 将单个字符转换为 std::string 前缀 \x01
- 尝试一次将单个字符读取到大小不确定的数组中
- C++ 如何将字符串拆分为单个字符
- 如何在C++中将单个字符哈希为相对较小的素数?
- 如何将像'A'这样的单个字符替换为类似"10"?
- 我通过迭代加法将二进制数转换为十进制并检查单个字符(请参阅代码)的方法有什么问题?
- std::bad_alloc 将文本文件中的单个字符存储到矢量C++中时
- 如何从用户那里获取单个字符,直到他输入"."或输入
- 字符串中单个字符作为数组的数据类型是什么
- 字符串中的重音,如何在单个字符中存储重音字符
- 从字符串中提取单个字符并将其转换为 int
- 如何将单个字符转换为为基本密码哈希器设置整数,C++
- 下推解析器是否扫描令牌或单个字符
- 如何定义一个从任何编码空间解析单个字符的精神 x3 解析器?
- C :占用更多内存,将单个字符作为char或字符串存储
- 如何从字符串中读取单个字符
- WM_GETTEXT只返回单个字符