3

の戻り値について問題が発生していますatoi()

charinコマンドライン引数argv[1]inttypeに変換して出力したい。

これが私のコードです。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int i;
    //print the char in *argv[]
    for(i = 0; i < argc; i++)
    {
            fprintf(stdout, "Arg %d: %s\n", i, argv[i]);
    }

    if (argc > 1)
    {
        i = atoi(argv[1]);      //convert char to int
        fprintf(stdout, "Int version of 1st arg: %d\n", i);
    }

    return 0;
}

私はそれをgccでコンパイルし、次のように実行します./a.out a b c

他の結果は正しいですが、atoi()結果は常に次のように表示されます

Int version of 1st arg: 0

このトピックについていくつか提案をいただけますか?

4

3 に答える 3

5

私の提案は、文字列を に変換する場合は、int実際に に変換できる文字列をパラメーターとして提供することintです。あなたの議論は次のとおりです。

 ./a.out a b c

したがって、intはありません。何を期待していましたか?aisに変換されたものは何だと思いますintか?

于 2012-10-14T21:05:00.383 に答える
3

atoi()char 文字列を数値に変換しますが、文字列が数値の場合のみです。

'a'ASCII 値として出力したい場合は%d、 and argv[1][0]、つまり string の最初の文字を使用しますargv[1]

于 2012-10-14T21:05:48.777 に答える
1

atoiを解析しようとするときなど、変換エラーを通知する方法がありませんa。代わりに使用strtolすると、変換が成功したかどうかを判断するのに十分な情報が得られます。

#include <stdlib.h>

char const * input = "abc";  // this could be argv[i]

char * e;

long int n = strtol(input, &e, 0);

if (*e != '\0') { /* conversion error! */ }
else            { /* n is valid        */ }
于 2012-10-14T21:06:10.867 に答える