C++字符数组以某种方式初始化为错误的大小
C++ - Char array somehow initializes to wrong size
作为类赋值的一部分,我正在从头开始编写一个字符串类,并且在编写子字符串函数时遇到了问题。据我所知,这与一个字符数组初始化为错误的大小有关。
据我所知,字符串类中的其他所有内容都运行得很好。我在Ubuntu上的Qt创建者中写这篇文章。
string string::substring(unsigned int startIndex, unsigned int endIndex) const {
if (startIndex >= endIndex) {
string s;
return s;
}
if (endIndex > length) endIndex = length;
int rlength = endIndex - startIndex;
char* r = new char[rlength];
for (int i = 0; i < rlength; i++) {
r[i] = chars[i + startIndex];
}
string s2(r);
return s2;
}
我期望看到的:
"This is a test".substring(0, 4) -> "This"
"This is a test".substring(6, 8) -> "is"
"This is a test".substring(9, 10) -> "a"
我实际看到的:
"This is a test".substring(0, 4) -> "This"
"This is a test".substring(6, 8) -> "is"
"This is a test".substring(9, 10) -> "a�;�"
根据我自己的故障排除,r似乎在某种程度上被初始化为比预期的更大的大小,在预期的文本之后留下了一些垃圾。有人知道为什么会发生吗?
尽管您没有提供string(char*)
构造函数的代码,但它能够判断字符串长度的唯一方法是扫描null终止符。但是,代码中的字符数组r
缺少null终止。
在数组的长度上添加一个char
,并将其设置为' '
以解决此问题:
char* r = new char[rlength+1];
for (int i = 0 ; i < rlength ; i++) {
r[i] = chars[i + startIndex];
}
r[rlength] = ' ';
相关文章:
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 分段错误 - 读取初始化指针的数组
- 需要帮助在 c++ 中将字符串转换为字符 ----错误 "const char *" 类型的值不能用于初始化 "char" 类型的实体
- 修复未初始化的局部变量错误
- 初始化迭代器错误 C++ 在 GCC 编译器中
- 在 gtest 中初始化堆栈上的引用变量的隔离错误
- 类型为 "Bucket&"(未限定的 const 限定)的引用不能使用 "SortedList." 类型的值进行初始化 如何修复此错误?
- 使用直接大括号初始化时,C++ 编译错误"声明末尾的预期";"
- 为什么我在向量初始化时收到此错误?
- C1001内部编译器错误是由于矢量初始化(如数组)引起的
- 初始化thread_local叮当中的错误
- Eclipse:错误:初始化模式失败(无法连接到目标)
- C 错误:初始化量太多
- Seg 错误初始化列表向量与控制台输入
- 通过传递的指针段错误初始化 char 数组
- c++错误:初始化器元素不是常量
- C++错误:初始化结构实例的向量数组成员
- Visual Studio C++11g编译错误-初始化程序过多
- OpenCV 错误:初始化 OpenCLDevices 中的 GPU API 调用 (-1001)