2017-08-06 22 views

答えて

5

sは何かを指し示す必要があります。ここでは128のバイトを割り当てる例です。

s = malloc(128); 

は、あなたがそれで終わったら、メモリを解放してください:あなたが読むことができますどのくらい制限する必要があります

free(s); 

注意ユーザーから。

scanf("%127s", s); 

NULターミネータのために余分なバイトが残っています。

3

main()関数のこの2行目がポインタを宣言しています。しかし、そのポインタは、プログラムが所有するメモリブロックを指すように初期化されることはありません。

ヒープ割り当て関数(malloc、calloc、realloc)のいずれかを使用してそのポインタを初期化することをお勧めします。

この初期化されていないポインタを使用することは未定義の動作であり、見たとおりにsegフォールトイベントが発生します。

機能のscanf関数()ファミリのいずれかを呼び出して、

  1. は常に操作が成功した保証するために返された値(ないパラメータ値)を確認してください。
  2. '%s'の入力/書式指定子を使用する場合は、常に、バッファのオーバーフローを避けるために入力 バッファの長さよりも短い1つのMAX CHARACTERS修飾子を含めます。このようなオーバーフローは定義されておらず、seg faultイベントを引き起こす可能性があります。
関連する問題