C++字符数组以某种方式初始化为错误的大小

C++ - Char array somehow initializes to wrong size

本文关键字:错误 初始化 方式 数组 字符 C++      更新时间:2023-10-16

作为类赋值的一部分,我正在从头开始编写一个字符串类,并且在编写子字符串函数时遇到了问题。据我所知,这与一个字符数组初始化为错误的大小有关。

据我所知,字符串类中的其他所有内容都运行得很好。我在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] = '';