【发布时间】:2012-06-10 18:38:00
【问题描述】:
可能重复:
How do you reverse a string in place in C or C++?
Why is this C code causing a segmentation fault?
Modifying value of char pointer in c produces segfault
运行一个非常简单的代码示例
#include <stdlib.h>
#include <iostream>
char* last_char(char* s){
char* last = s;
while (*last) ++last;
return last;
}
char* in_place_reverse(char* s) {
char* left = s;
char* right = last_char(s);
char temp;
while( left < right ) {
temp = *left;
*left = *right;
*right = temp;
left++;
right--;
}
return s;
}
int main(){
char * s = "letters\n";
std::cout << in_place_reverse(s);
}
我总是得到
Segmentation fault
但从我的角度来看,我并没有在代码中做任何非法的事情。 请帮我确定问题所在。
附:我用
编译g++ example.c
【问题讨论】:
-
您应该在调试器中运行此代码。它会告诉你哪条线导致了段错误,你应该能够从那里向后工作。
-
请注意,您的函数 last_char 返回分隔符
\0,因此如果您的代码不会出现段错误,那么std::cout将不会输出任何内容,因为您在字符串中的第一个字符将在还原后为\0。
标签: c++ c pointers char segmentation-fault