这么会是段错误呢?纠结了……

发布于 2022-10-15 07:33:55 字数 2078 浏览 32 评论 0

  1. #include <stdio.h>
  2. void reverse_string(char * string){
  3.         char * last_string, * start_string;
  4.         last_string = string;
  5.         start_string = string;
  6.         for (last_string; *last_string != '\0'; ++last_string)
  7.                 ;
  8.         --last_string;
  9.         printf("test...................1.\n");
  10.         char  temp;
  11.         for (last_string; last_string != string; last_string--){
  12.                 temp = *last_string;
  13.                 *last_string = *string;    ////////////////////////////////////////段错误处
  14.                 *string = temp;
  15.                 string++;
  16.         }
  17.         printf("%s\n",start_string);
  18. }
  19. int main(){
  20.         char * string = "abcdefghijklmn";
  21.         printf("%s\n",string);
  22.         printf("user reverse_string()\n");
  23.         reverse_string(string);
  24.         printf("%s\n",string);
  25.         return 0;
  26. }

复制代码我是在Linux下用gcc编译这段阿程序,怎么会提示段错误呢?(函数实现字符调换功能)

先不管程序好不好,谁来帮我看看为什么会提示段错误?谢谢…………

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

人间不值得 2022-10-22 07:33:55

char * string = "abcdefghijklmn";

修改string literal 是未定义行为

应改成
char  string[] = "abcdefghijklmn";

冰火雁神 2022-10-22 07:33:55

"abcdefghijklmn"是不可以改变的。

单身情人 2022-10-22 07:33:55

为什么总是搞不清字符指针和字符串字面常量的概念呢?

毁梦 2022-10-22 07:33:55

为什么用指针总是用不对呢?

滥情空心 2022-10-22 07:33:55

"abcdefghijklmn"
介是个字符串常量

无人接听 2022-10-22 07:33:55

"abcdefghijklmn"这是字符串常量,放在只读数据段,是不能改的,可以改成数组。

放手` 2022-10-22 07:33:55

除了ls诸位说的问题以外,还有一个致命的bug:

最后一重循环里面,string++和last_string--后判断
last_string != string
依照传递的字符串长度奇偶不同,这个循环有可能不能正常退出,造成访问越界(段错误)。

a√萤火虫的光℡ 2022-10-22 07:33:55

chinaunix C版还是总有人问这种低级问题啊...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文