gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:24:24 25 4
gpt4 key购买 nike

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

据我所知,字符串类中的其他所有内容都运行良好。我在 Ubuntu 上用 Qt creator 写这个。

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*) 构造函数的代码,但它可能判断字符串长度的唯一方法是扫描空终止符。但是,代码中的字符数组 r 缺少空终止符。

在数组的长度上增加一个char,并将其设置为'\0'来解决这个问题:

char* r = new char[rlength+1];
for (int i = 0 ; i < rlength ; i++) {
r[i] = chars[i + startIndex];
}
r[rlength] = '\0';

关于C++ - 字符数组以某种方式初始化为错误的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54603034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com