#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故障。
帮助赞赏。
答案 0 :(得分:5)
您无法修改常量字符串。请改用char数组:
char str[] = "abcdef";
reverseStr(str);
答案 1 :(得分:3)
您无法修改字符串文字 - 它们存储在只读内存中。
使用:
char str[] = "abcdef";
reverseStr(str);
答案 2 :(得分:3)
你的逆转功能看起来不错。但这是你调用导致此崩溃的函数的方式。您正在传递一个字符串文字,它是只读的函数。修改字符串文字是一种未定义的行为,在你的情况下表现为崩溃。
更改
reverseStr("abcdef");
到
char str[] = "abcdef";
reverseStr(str);
将字符数组传递给函数。