3

さまざまな単関数を作成して、Cポインターについて学習しています。char配列を逆にする関数を作成しました。動作しますが、出力後に大量のガベージ文字も表示されます(下のスクリーンショットを参照)。

スクリーンショット

これが私のコードです:

void reverseString();

int main()
{
    reverseString();

    system("PAUSE");
    return 0;
}

void reverseString()
{
    char string1[20], string2[20];
    char *ptr1, *ptr2;
    ptr1 = &string1[0];
    ptr2 = &string2[0];

    printf("Enter string: \n");
    scanf("%s", string1);

    int len1 = strlen(string1);

    int i;
    for (i = 0; i < len1; i++)
    {
        ptr2[i] = ptr1[len1 - i - 1];
    }

    printf("%s\n", string2);
}

どうすればゴミの文字を取り除くことができますか?私のコードに何か問題がありますか、それとも私は何かまたは何を説明していませんか?

4

1 に答える 1

8

新しい文字列をnul-terminateするのを忘れました:

int i;
for (i = 0; i < len1; i++)
{
    ptr2[i] = ptr1[len1 - i - 1];
}

//  Add this
ptr2[i] = '\0';

を印刷するchar*と、そのヌル文字が見つかるまで読み続けます。しかし、あなたがそれを省略したので、それは行き来し続けました...

于 2012-07-16T04:32:09.903 に答える