反向C字符串 - 简单的bug

时间:2012-10-24 05:33:01

标签: c string pointers segmentation-fault

  

可能重复:
  Is it possible to modify a string of char in C?

#include <stdio.h>

void reverseStr(char *str);

main()
{
  reverseStr("abcdef");
}

void reverseStr(char *str) {
    char *tmp = str;
    char curr;
    while (*tmp != '\0') {
        tmp++;
    }
    tmp--;
    while (tmp > str) {
        curr = *str;
        *str = *tmp;
        *tmp = curr;
        str++;
        tmp--;
    }    
}

当我运行它时,我得到:

/usr/bin/runit/srun_c: line 12:  2809 Segmentation fault      /tmp/run_c_executable

到底是怎么回事?我正在练习面试,我在我的C中生锈了,想要练习一些简单但不能为我的生活弄清楚这一点。 当我注释掉*str = *tmp;行时,我注意到seg故障消失了,我不明白为什么会导致seg故障。 帮助赞赏。

3 个答案:

答案 0 :(得分:5)

您无法修改常量字符串。请改用char数组:

char str[] = "abcdef";

reverseStr(str);

答案 1 :(得分:3)

您无法修改字符串文字 - 它们存储在只读内存中。

使用:

char str[] = "abcdef";

reverseStr(str);

答案 2 :(得分:3)

你的逆转功能看起来不错。但这是你调用导致此崩溃的函数的方式。您正在传递一个字符串文字,它是只读的函数。修改字符串文字是一种未定义的行为,在你的情况下表现为崩溃。

更改

reverseStr("abcdef");

char str[] = "abcdef";
reverseStr(str);

将字符数组传递给函数。