这么会是段错误呢?纠结了……
- #include <stdio.h>
- void reverse_string(char * string){
- char * last_string, * start_string;
- last_string = string;
- start_string = string;
- for (last_string; *last_string != '\0'; ++last_string)
- ;
- --last_string;
- printf("test...................1.\n");
- char temp;
- for (last_string; last_string != string; last_string--){
- temp = *last_string;
- *last_string = *string; ////////////////////////////////////////段错误处
- *string = temp;
- string++;
- }
- printf("%s\n",start_string);
- }
- int main(){
- char * string = "abcdefghijklmn";
- printf("%s\n",string);
- printf("user reverse_string()\n");
- reverse_string(string);
- printf("%s\n",string);
- return 0;
- }
复制代码我是在Linux下用gcc编译这段阿程序,怎么会提示段错误呢?(函数实现字符调换功能)
先不管程序好不好,谁来帮我看看为什么会提示段错误?谢谢…………
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
![扫码二维码加入Web技术交流群](/public/img/jiaqun_03.jpg)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
char * string = "abcdefghijklmn";
修改string literal 是未定义行为
应改成
char string[] = "abcdefghijklmn";
"abcdefghijklmn"是不可以改变的。
为什么总是搞不清字符指针和字符串字面常量的概念呢?
为什么用指针总是用不对呢?
"abcdefghijklmn"
介是个字符串常量
"abcdefghijklmn"这是字符串常量,放在只读数据段,是不能改的,可以改成数组。
除了ls诸位说的问题以外,还有一个致命的bug:
最后一重循环里面,string++和last_string--后判断
last_string != string
依照传递的字符串长度奇偶不同,这个循环有可能不能正常退出,造成访问越界(段错误)。
chinaunix C版还是总有人问这种低级问题啊...