交流程序中的总线错误10

AR8*_*R89 3 c string

可能重复:
C中的char s []和char*s有什么区别?
为什么这个程序会给出分段错误?

这是代码:

#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),它需要一个字符串广告反转它,但我不明白它出错的地方.

cod*_*ict 5

这里有两个错误:

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)