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;
}

問題は reverse(char *c) にあります。文字列と逆の文字列が必要ですが、どこが間違っているのかわかりません。

4

1 に答える 1

6

ここには 2 つのバグがあります。

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 に答える