0

それで、私は「矛盾」、またはおそらくCの配列の理解のギャップを発見しました。以下は文字列を逆にする簡単なプログラムです。不一致は、コードのコメント内に記載されています。

#include <stdio.h>
#include <string.h>

void reverser(char to_bb[]){
    printf("%s\n", to_bb[some_valid_number]); /* This results in a bus error */
    int counter = strlen(to_bb);              /* ^ Assume actual integer */
    char reversed[counter];         
    int counter2 = 0;
    for(--counter; counter >= 0; counter--){     
        reversed[counter2] = to_bb[counter];  /* This does not */
        counter2++;
    }
    reversed[counter2] = '\0';
    printf("The reversed: %s\n", reversed);
}

int main(){
    char to_be_reversed[20];
    puts("Enter the string to be reversed: ");
    scanf("%19s", to_be_reversed);
    reverser(to_be_reversed);
    return 0;
}

printf();要素を呼び出して別の配列にスワップしないのに、なぜバスエラーが発生するのですか?彼らは同じことを呼んでいませんか?

4

1 に答える 1

7
printf("%s\n", to_bb[some_valid_number]);

s変換指定子にはへのポインターが必要charですto_bb[some_valid_number]が、タイプはcharです。

オブジェクトへのポインタを取得するには、次の演算子to_bb[some_valid_number]を使用できます。&

printf("%s\n", &to_bb[some_valid_number]);

代わりに文字を印刷する場合は、変換指定子to_bb[some_valid_number]を使用します。c

printf("%c\n", to_bb[some_valid_number]);
于 2013-01-07T20:21:03.020 に答える