反向C字符串 - 简单的bug

Ken*_*Ken -4 c string pointers segmentation-fault

可能重复:
是否可以修改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--;
    }    
}
Run Code Online (Sandbox Code Playgroud)

当我运行它时,我得到:

/usr/bin/runit/srun_c: line 12:  2809 Segmentation fault      /tmp/run_c_executable
Run Code Online (Sandbox Code Playgroud)

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

nne*_*neo 5

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

char str[] = "abcdef";

reverseStr(str);
Run Code Online (Sandbox Code Playgroud)