c程序中的总线错误10

时间:2012-11-18 16:37:50

标签: c string

  

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

1 个答案:

答案 0 :(得分:5)

这里有两个错误:

1)

您正在尝试更改字符串文字,这会导致未定义的行为,在您的情况下表现为总线错误。

更改

char *s = "antonio";

char s[] = "antonio";

2)

此外,您正在为整个字符串长度运行循环计数器:

for(i = 0; i < len; i++)

这样你就可以找回原来的字符串了。你想要的只是将一半的角色换成另一半:

for(i = 0; i < len/2; i++)