-2

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() 呼び出しでプログラムがクラッシュする理由がわかりましたか?

4

1 に答える 1

1

#include <stdlib.h>atoi関数を含めるために追加しましたか?

私はこれを試してみましたが、うまくいきます:

#include <stdio.h>
#include <stdlib.h>
int main(void) {
    char string[] = "aaaa 1111";
    int int_pin = atoi(string+5);
    printf("%d", int_pin); /* returns 1111 as intended */
    return 0;
}
于 2013-04-28T17:12:26.397 に答える