我是c的新手并尝试编写一个简单的str反向函数。
这是我上网的代码,编译好了,但运行时提出“总线错误:10”。(请忽略这么多printf,我试图弄清楚每一步)
#include <stdlib.h>
#include <stdio.h>
char *str_reverse( char *begin, char *end ) {
char *res;
char temp;
char temp2;
res = begin;
printf("str %s %s\n", begin,end);
printf("res add %p begin add %p, end add %p\n", res, begin, end);
while (end > begin) {
printf("start\n");
temp = *end;
printf("temp %c\n",temp);
*end = *begin;
printf("end addr %p\n",end);
end--;
*begin = temp;
printf("result %s\n", res);
begin++;
}
printf("result %s\n", res);
return res;
}
int main() {
char *begin = "abc";
char *end;
end= begin + 2;
char *new = str_reverse(begin, end);
printf("value %s\n", new);
return 0;
}
结果是:
str abc c
res add 0x1082fdf86 begin add 0x1082fdf86, end add 0x1082fdf88
start
temp c
Bus error: 10
我猜问题出在“* end = * begin”,但我不知道为什么?你能帮助我吗?谢谢!
答案 0 :(得分:2)
您正在尝试反转常量字符串。作为常量,它存储在不允许写入的段中。相反,分配一个可写缓冲区(数组),将字符串复制到它,然后应用你的函数。
int main() {
char *str = "abc";
char *begin = malloc(strlen(str)+1);
if (!begin) {
/* handle error*/
}
strcpy(begin, str);
char *end;
end= begin + 2;
char *new = str_reverse(begin, end);
printf("value %s\n", new);
free(begin);
return 0;
}