atoi() に奇妙な問題があります: "aaaa 1111\0" のような文字列 (str としましょう) があります (印刷して確認しました - 本当にそうです)。str+5 で atoi を実行しようとしたところ、プログラムがクラッシュしました。1 行前後にログを追加したところ、1 行前は表示されますが、それ以降は表示されません。したがって、問題はこの行にあります。str+5 も出力しました。結果は期待どおりなので、文字列にも問題はありません。
次に、サイズ 5 の char[] 配列を作成しようとし、4 つの数値をコピーして、最後に null 終端を追加しました。それはまだクラッシュします...
コードの追加:
int int_pin;
char buff[MAX_LEN + PIN_LEN + 1]; //MAX_LEN = 5, PIN_LEN = 4
//reading size of MAX_LEN + PIN_LEN from file to buff...
buff[MAX_LEN + PIN_LEN] = '\0';
int_pin = atoi(buff+MAX_LEN); //crashes
編集:私も最も単純なコードを試しました:
char a[] = "1234";
int_pin = atoi(a);
そして、それはまだクラッシュします。単純な atoi() 呼び出しでプログラムがクラッシュする理由がわかりましたか?