Possible Duplicate:
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
最佳答案
两个问题:
- 您正在尝试修改字符串文字。这可能有效,也可能无效,或者可能会崩溃。这正在调用未定义的行为。使用
char s[] = "letters\n"
制作可变拷贝。 last_char()
实际上返回一个指向字符串末尾的哨兵'\0'
的指针——它指向最后一个字符之外。将返回最后
更改为返回最后 - 1
。否则你也会移动哨兵,而这几乎肯定不是你想要的。 (请注意,如果字符串长度为零,这将返回一个指向垃圾的指针。如果*s == '\0'
,您应该在in_place_reverse()
中快速成功以避免这种复杂性。)
关于时间:2019-03-17 标签:c++segfault: char pointers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10919426/