c++ - 这个子字符串函数有什么问题
问题描述
当我尝试将其输出时,子字符串没有输出任何内容。我应该得到一些输出
请参阅下面的代码,但基本上我放置了 2 个参数 ints a 和 b,其中 a 是起始位置,b 是要复制的字符数。但函数跳到最后
DSString DSString :: substring(int a, int b){
if(a >= 0 && b > a){
char* tmp = new char[b - a + 1];
strncpy(tmp,data,b-a);
DSString result(tmp);
delete [] tmp;
return result;
}
return DSString("");
}
对于“Hello”,参数 3 和 2 预计会看到“lo”,但返回的是一个空字符串。
解决方案
请注意以下几点:
- 您必须使用
a
两次 - 用于计算复制字符的数量(我看到了)并找到子字符串的开头(我希望类似data + a
) - 因为“如果源长于 num,则不会在目标末尾隐式附加空字符。 ”(请参阅 C++ 参考资料)您必须
tmp
在复制数据后添加空字符。 data
必须是数据类型char *
(其实我没有看到定义)- 应该
char * data
在构造函数中分配内存DSString::DSString
(问题中也没有显示)