我正在做一些基本的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;
}
答案 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]匹配反向字符串,代码修改其输入字符串。