我遇到了关于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
你能就这个话题给我一些建议吗?
答案 0 :(得分:5)
我的建议是,如果要将字符串转换为int
,请将实际转换为int
的字符串作为参数提供。你的论点是:
./a.out a b c
所以没有注意。你有什么期望?您认为a
转换为int
的是什么?
答案 1 :(得分:2)
atoi()
将char字符串转换为数字 - 但前提是字符串是数字。
如果您想将'a'
打印为ASCII值,请使用%d
和argv[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 */ }