-3

stdin をバッファに読み込んで処理するプログラムを書いています。処理する必要があるこれらのアイテムの大部分は文字列 (または文字配列) です。ただし、文字配列として読み取ってから、後で使いやすくするために int に変換する必要がある項目が 1 つあります。

for(i=0; i<n; i++){
    num[i] = buff[(i)];
    printf("%c", num[i]);
}

convert = atoi(num);

そのため、printfが正しいため、正しい文字グループがnumに読み込まれていることは確かです。しかし、convert を印刷しようとすると 0 になってしまい、何が間違っているのか非常に困惑しています。0 が返されるということは、有効な変換を実行できなかったことを意味することはわかっていますが、何が無効になっているのかはわかりません。任意のヒント?

EDIT:前にこれらを含めて申し訳ありません>_<

n は buff 配列内の文字数です buff は stdin が読み込まれるバッファ配列です

4

1 に答える 1

4

atoiエラー状態を分析する手段を提供しない関数です。その上、オーバーフローの状況では未定義の動作が発生します。実際のプログラムでatoi(またはグループのatof何かを)使用しないでください。ato...それは実質的に役に立たない。

文字列から数値への変換を実行するには、strtol(およびグループの他の関数strto...) を使用します。

numでは、あなたが電話をかけた瞬間、あなたの中に何が入っているのatoiでしょうか? num適切にゼロ終端されていますか?

于 2012-11-16T17:31:21.210 に答える