-1

私の目標は、stdin に書いたのと同じテキストを返す関数です。以下のコードをコンパイルした結果:

#include <stdio.h>

char chain[990];
int znaki()
{
scanf("%s", chain);
int i=0;
do{
    putchar(chain[i]);
    i++;
}
while(chain[i]!=10);
return 0;
}
int main(int argc, char **argv)
{
znaki();
return 0;
}

私は得る:

MyOwnText

MyOwnText

たくさんの

Linux の cat /dev/random のようなランダムなテキストの

最初の行は私の入力です。なんで?

4

3 に答える 3

1
do {
    putchar(chain[i]);
    i++;
} while(chain[i]!=10);

このコードは、コード 10 の char が見つかるまで、チェーン (およびそれ以降) から文字を出力します。バッファーは初期化されていないため、他のプログラムからのランダムなデータで満たされます。そして、そのデータが表示されます。おそらく、あなたは次のようなものを書きたかった

do {
    putchar(chain[i]);
    i++;
} while(i != 10);

これにより、配列から最初の 10 文字が出力されます。

ところで、このコードはバッファ オーバーフローに対して脆弱なようです。

于 2014-11-25T23:22:47.567 に答える
0
  1. 配列があります。
  2. ユーザーに単語を尋ね、それをその配列の先頭に格納しました。
  3. 次に、配列を印刷しました。

あなたが書いた入力が印刷された理由は私には明らかです。

于 2014-11-25T22:54:05.060 に答える