这是代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
问题是反向(char*c),它需要一个字符串广告反转它,但我不明白它出错的地方.
这里有两个错误:
1)
您正在尝试更改字符串文字,这会导致未定义的行为,在您的情况下表现为总线错误.
更改
char *s = "antonio";
Run Code Online (Sandbox Code Playgroud)
至
char s[] = "antonio";
Run Code Online (Sandbox Code Playgroud)
2)
您还在运行循环计数器以获得整个字符串长度:
for(i = 0; i < len; i++)
Run Code Online (Sandbox Code Playgroud)
这样你就可以找回原来的字符串了.你想要的是只交换一半的角色与另一半:
for(i = 0; i < len/2; i++)
Run Code Online (Sandbox Code Playgroud)