0

だから、私は文字列を逆にする簡単なプログラムを作ろうとしています。Cに関しては、特に記憶を理解する上で、私は耳の後ろで非常に濡れています。これが私のコードです:

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

void reverser(char to_bb[]){
    int counter = strlen(to_bb);      /* size of entry */
    char reversed[counter];         /* creating blank array of same size */
    int counter2 = 0;
    for(counter - 1; counter >= 0; counter--){     /* loop to swap chars */
            reversed[counter2] = to_bb[counter];
            counter2++;
    }
    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;
}

問題は、バスエラーが発生し続けることです。私はそれが4ビットであることを使用sizeof(to_bb)して学びました。これはto_bb[]、void関数内の単なるポインターであることを示しています。文字列を操作できるように(つまり、その要素を呼び出すために)文字列を抽出する多くの方法を試しましたが、成功しませんでした。strcpy()を使用して、より長い間宣言を試み*ました。

アドバイスありがとうございます。記憶は理解するのが難しいことを証明しています!

4

3 に答える 3

1

警告付きでコンパイルする方法を学ぶ必要があります。

gcc -Wall yourfile.c

In function 'reverser':
11: 5: warning: statement with no effect [-Wunused-value]

forステートメントの最初の部分はcounter - 1割り当てです。割り当ては行いません。したがって、それは何もしないので、あなたはあなたが何も役に立たないことをあなたに告げる警告を受け取ります。

あなたが学びたいと思うかもしれないもう一つの本当に便利なオペレーターは、,オペレーターです。これにより、ループ本体の行を減らして、このようなループを実現できます。

for(counter -= 1; counter >= 0; counter--, counter2++)     /* loop to swap chars */

最後に、あなたはNULLターミネーターを考慮していません。この関数は、ターミネータを含まないstrlen()文字列の文字数を示します。NULL

したがって、それを自分で説明し、ループの後に次のように追加する必要があります。

char reversed[counter+1];
int counter2 = 0;
for(counter - 1; counter >= 0; counter--, counter2++)     /* loop to swap chars */
        reversed[counter2] = to_bb[counter];
reversed[counter2] = '\0';
printf("The reversed: %s\n", reversed);
于 2013-01-07T20:26:19.663 に答える
1

で、またはforに変更counter - 1します。counter = counter-1--counter

のサイズにもう1文字追加し、reversedに設定して'\0'、nullで終了するようにします。または、次を使用して印刷される文字数を制限することもできます。

printf("The reversed: %.*s\n", counter2, reversed);
于 2013-01-07T19:36:57.983 に答える
1

まず、\0文字を配列に入れて、空の文字列を作成します。

クイックフィックス、変更

for(counter - 1; counter >= 0; counter--){ 

の中へ

for(--counter; counter >= 0; counter--){ 
于 2013-01-07T19:42:54.737 に答える