1

後で使用するためにchar配列にロードされる一連のcharを入力する必要があるプログラムを書いています。私が動作させようとしているコードは次のようになります。

char temp = getchar();
while(temp != '\n'){//input char into temp until '\n'
    input[strlen(input)] = temp;//adds temp to end of input
    temp = getchar();
}

しかし、プログラムでこの行に到達すると、「セグメンテーション違反 (コアダンプ)」が発生してクラッシュします.. \n を別の文字 (% など) に置き換えると、

char temp = getchar();
while(temp != '%'){//input char into temp until '\n'
    input[strlen(input)] = temp;//adds temp to end of input
    temp = getchar();
}

その後、正常に動作しますが、% ではなく改行を使用したいと考えています。私はいくつかのチュートリアルを見てきましたが、これはエンターがヒットするまで入力する方法だと言っていたので、何が問題なのかわかりません。前もって感謝します。

4

3 に答える 3

2

これを使用できます:

while ( (temp=getchar()) != EOF && temp != '\n' )

于 2012-02-04T00:15:17.827 に答える
2

問題はここにあります:

input[strlen(input)] = temp;

これは、次の文字が文字列の終わりを示す '\0' であるという保証がないため、簡単にバッファ オーバーフローにつながる可能性があります。入力の最後に境界チェックを追加する必要があります。スペースが非常に多く、temp '\0' の後に次の文字を作成する必要があります。

また、Tom が提案したように、fgets の使用を検討する必要があります。(編集:申し訳ありませんが、gets を読んで入力しましたが、fgets も考えていました)

于 2012-02-04T00:18:37.520 に答える
1

fgetsやりたいことが read だけの場合は、使用を検討できます\nこれがそのページです。

を使用しないでくださいgets

于 2012-02-04T00:17:06.623 に答える