可能重复:
What is the difference between char s[] and char *s in C?
Why does this program give segmentation fault?
这是代码:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
void reverse(char *c){
int len = strlen(c);
char tmp;
int i;
for(i = 0; i < len; i++){
tmp = c[len-1-i];
c[len-1-i] = c[i];
c[i] = tmp;
}
}
int main(){
char *s = "antonio";
//printf("%zd\n", strlen(s));
reverse(s);
printf("%s\n", s);
return 0;
}
问题是反向(char * c),它需要一个字符串广告反转它,但我不明白它出错的地方。
答案 0 :(得分:5)
这里有两个错误:
1)
您正在尝试更改字符串文字,这会导致未定义的行为,在您的情况下表现为总线错误。
更改
char *s = "antonio";
到
char s[] = "antonio";
2)
此外,您正在为整个字符串长度运行循环计数器:
for(i = 0; i < len; i++)
这样你就可以找回原来的字符串了。你想要的只是将一半的角色换成另一半:
for(i = 0; i < len/2; i++)