3

我遇到了关于返回值的问题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

你能给我一些关于这个话题的建议吗?

4

3 回答 3

5

我的建议是,如果要将字符串转换为int,请提供一个实际上可以转换为int. 你的论点是:

 ./a.out a b c

所以没有整数。你期待什么?你认为a转换成一个int是什么?

于 2012-10-14T21:05:00.383 回答
3

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

如果您想打印'a'为 ASCII 值,只需使用%dand argv[1][0],即字符串的第一个字符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 回答