首页 > 解决方案 > 这个子字符串函数有什么问题

问题描述

当我尝试将其输出时,子字符串没有输出任何内容。我应该得到一些输出

请参阅下面的代码,但基本上我放置了 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”,但返回的是一个空字符串。

标签: c++string

解决方案


请注意以下几点:

  • 您必须使用a两次 - 用于计算复制字符的数量(我看到了)并找到子字符串的开头(我希望类似data + a
  • 因为“如果源长于 num,则不会在目标末尾隐式附加空字符。 ”(请参阅​​ C++ 参考资料)您必须tmp在复制数据后添加空字符。
  • data必须是数据类型char *(其实我没有看到定义)
  • 应该char * data在构造函数中分配内存DSString::DSString(问题中也没有显示)

推荐阅读