3

可能重复:
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;
}

问题在于反向(char *c),它需要一个字符串广告来反转它,但我不明白哪里出错了。

4

1 回答 1

6

这里有两个错误:

1)

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

改变

char *s = "antonio";

char s[] = "antonio";

2)

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

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

这样你会得到原来的字符串。您想要的只是将一半的字符与另一半交换:

for(i = 0; i < len/2; i++)
于 2012-11-18T16:39:40.527 回答