atoi(argv [1])的返回值始终为0

时间:2012-10-14 21:02:25

标签: c argv atoi

我遇到了关于atoi()的返回值的问题。

我想将命令行参数char中的argv[1]转换为int类型并将其打印出来。

这是我的代码。

#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

你能就这个话题给我一些建议吗?

3 个答案:

答案 0 :(得分:5)

我的建议是,如果要将字符串转换为int,请将实际转换为int的字符串作为参数提供。你的论点是:

 ./a.out a b c

所以没有注意。你有什么期望?您认为a转换为int的是什么?

答案 1 :(得分:2)

atoi()将char字符串转换为数字 - 但前提是字符串是数字。

如果您想将'a'打印为ASCII值,请使用%dargv[1][0],即字符串argv[1]的第一个字符。

答案 2 :(得分: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        */ }