字符*的分割错误
Segmentation fault with char *
我使用char数组/指针进行原位字符串反转算法。为什么(1)
给出分割故障,而(2)
工作完美?
#include <iostream>
#include <cstring>
using namespace std;
//In-place string reversal
void ip_reverse(char* cstr)
{
int len = strlen(cstr);
int hlen = len/2;
char ctmp;
for(int i=0; i<hlen; i++)
{
ctmp = cstr[i];
cstr[i] = cstr[(len-1)-i];
cstr[(len-1)-i] = ctmp;
}
}
int main()
{
//char* cstr = "Kaboom"; //(1)This gives "Segmentation fault"!
char cstr[] = "Kaboom"; //(2)This works!
cout << "Original string => " << cstr << endl;
ip_reverse(cstr);
cout << "Reversed string => " << cstr << endl;
return 0;
}
char* cstr = "Kaboom";
在本例中,字符串字面值"Kaboom"
具有数组类型。它被转换为指向字符串字面量中的第一个字符的指针,并且该指针存储在cstr
中。但是,不能修改字符串字面值。实际上,您至少应该看到上面一行的警告。它应该是const char*
。
char cstr[] = "Kaboom";
这实际上是数组初始化的一个特殊情况。当您使用字符串字面值初始化数组时,它会将字符串字面值的每个元素复制到您的数组对象中。这样你就有了你自己可修改的字符串副本
相关文章:
- C++映射分割错误(核心转储)
- 由cin中的字符串中未捕获空白引起的分割错误
- 删除映射和分割错误中的一个过去结束元素
- 在指向函数中读取变量时出现分割错误
- 在链表中的第 n 位插入显示分割错误
- 较高值 n 的分割错误(例如 n=999997)
- 尝试通过memcpy复制大尺寸浮点向量时的分割错误
- 分割错误:向量中的擦除功能
- 向量向量的分割错误
- 我在C++中编写了一个方法来打印树类的预序,但它显示了分割错误
- C ++分割错误,为什么使用"long long"我没有得到答案?
- 在尝试使用递归查找集合子集的总数时,我遇到了分割错误
- 分割错误 11:尝试使用 cin 输入 B[1] 时
- 集合布局上的 Qt 分割错误
- 高达20亿的筛子会产生分割错误
- G :内部编译器错误:分割故障(程序CC1PLUS) - 我在哪里开始
- 二进制搜索树操作程序错误:分割故障(核心倾倒)
- 在给出正确的输出后,给出错误分割错误(核心转储)
- 得到错误分割错误(核心转储)进程返回139 (0x8B)
- 内部编译错误:分割错误在gcc.发送可变模板到struct时