mea*_*dre -1 c c++ pointers char segmentation-fault
运行一个非常简单的代码示例
#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);
}
Run Code Online (Sandbox Code Playgroud)
我一直都有
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
但是从我的角度来看,我在代码中没有做任何违法的事情.请帮我确定是什么问题.
PS我编译
g++ example.c
Run Code Online (Sandbox Code Playgroud)
两个问题:
char s[] = "letters\n"使一个可变的副本.last_char()实际上返回一个指向'\0'字符串末尾的标记的指针- 它指向最后一个字符之外.更改return last到return last - 1.否则你也会移动哨兵,这几乎肯定不是你想要的.(注意,如果字符串是零长度,这将返回指向垃圾的指针.in_place_reverse()如果*s == '\0'要避免这种复杂性,你应该快速成功.)| 归档时间: |
|
| 查看次数: |
944 次 |
| 最近记录: |