-2
#include<stdio.h>
#include<conio.h>
int main()
{
char test [7];
for(int i=0;i<10;i++)
scanf("%c",&test[i]);
puts(test);
getch();
return 0;
}

私は DevC++ (大学の規則) を使用していますが、gets() には境界チェックがないことがわかっているため、意図的に for() ループを使用して文字列を入力しました。配列のサイズを超える文字列を入力すると、puts で余分な文字が出力されます。なんでそうなの ??

サンプル入力: helloworld 出力: hellowos

サンプル入力: Hellopeople 出力: Hellopep

4

4 に答える 4

1

最大7要素を格納できるバッファに10文字を格納しようとすると、バッファオーバーフローが発生します

char test [7];
for(int i=0;i<10;i++)
  scanf("%c",&test[i]);

\0これを修正するには、バッファを 10 要素にし (9 文字と最後に 1 文字を格納できるように)、次のようにします。

char test [10]; //10 elements long
scanf("%9s",test); //Get at-most 9 chars

またはあなたも使うことができますfgets

于 2014-12-14T10:08:19.237 に答える
0

文字列が '\0' で終わっていません。

于 2014-12-20T17:57:36.590 に答える