反向串总线错误

时间:2016-02-08 21:28:24

标签: c++ string reverse

我正在做一些基本的c ++并决定实现一个revStr方法。

但由于某些原因,每次执行该方法时,都会遇到由while循环中的赋值引起的总线错误,但我无法理解原因。

有人有任何线索吗?任何帮助将不胜感激。

char* reverseStr(char* s){
    if(!s){
        cout << "Void!"<<endl;
        return s;
    }

    char* end, *start;
    end = s;
    start = s;

    while(*(end) != '\0'){
        end++;
    }
    end--;


    while(start < end){
        char temp = *start;
        cout << temp <<endl;
        *start = *end;
        *end = temp;
        start++;
        end--;
    }

    cout << "The reversed string is: " << s <<endl;
    return s;

}

道歉..我在下面添加了驱动程序:

int main(int argc, char** argv) {

assert(reverseChar("hello") == "olleh");

return 0;
}

2 个答案:

答案 0 :(得分:0)

如果你传递一个字符串文字,它不应该编译,因为你的func(正确)采用非const。 当然,除非你强制施放它......所以不要删除const而是strdup()而不是它。

也可能发生的事情是循环永远运行。您可以使用调试器进行测试。

原因是指针无法正确比较,或者更大。只为了平等。您必须将<更改为!=

答案 1 :(得分:0)

无法重现问题...代码按预期工作。

我的测试(显示我是如何创建&#34; forwardCharStar [100]);&#34;)

int t282(void)
{
   std::string  forwardStr = "abcdefghijklmnopqrstuvwxyz";
   size_t sz =  forwardStr.size();

   assert(sz < 100); // check fit
   //          ^^^-----------vvv
   char      forwardCharStar[100];

   for (size_t i = sz-1; i < 100; ++i) forwardCharStar[i] = 0;
   for (size_t i = 0; i < sz; ++i)     forwardCharStar[i] = forwardStr[i];

   std::string rS = reverseStr(forwardCharStar);

   std::cout << "The reversed string is: " << rS << std::endl;

   return (0);
}

注意:forwardCharStar [100]的尾部填充&#39; \ 0&#39;           - null终止符在c样式字符串中很重要

注意:然后从&#39; forwardStr&#39;转移了26个字符。前面的前卫明星

输出:

The reversed string is: zyxwvutsrqponmlkjihgfedcba

注意:我通过char输出来注释char       第二行while循环

     // std::cout << temp << std::endl;

注意:forwardCharStar [100]匹配反向字符串,代码修改其输入字符串。