如何从参数行获取数字?

时间:2016-03-27 12:41:44

标签: c

我有这段代码

www.myweb.com/article-1   // assume 1 is article_id

当我使用命令 ./ a.out 6 执行编译代码时,它打印54号,但我需要6个。

3 个答案:

答案 0 :(得分:3)

命令行参数作为C字符串传递,而不是作为数字传递。您不能将C字符串转换为其对应的数字,因为它是指向字符序列的指针,而不是数字本身。

您的代码尝试将代表6的字符串中的第一个字符(即"6")转换为int。转换成功,因为char是一个完整的数字类型,但是你得到54而不是6,因为这是你系统上'6'的字符代码。

您可以使用atoi正确进行转换:

int n = atoi(argv[1]);
printf("%i\n", n);

您需要包含<stdlib.h>才能进行编译。

答案 1 :(得分:2)

您正在将一个char *类型转换为int。这将导致它的ASCII值。 %i和%d指向相同的东西,即有符号整数 参考:Format specifiers in C
您可以使用以下

origin/bar


printf("%s", argv[1]);

请记住,在使用atoi(argv 1)时,应该没有其他ASCII字符,如 - ,+等。在这些情况下,atoi()将返回0,因为atoi()不会检测到任何错误(参考:http://linux.die.net/man/3/atoi)。所以请记住从参数中删除所有这些字符,然后传递纯数字。另外,如果你喜欢它,你也可以写自己的atoi()。

答案 2 :(得分:0)

首先,你不能像这样向char *施放int。看看atoi();。 接下来,如果您只想打印十进制数字,则应该使用%d标记,而不是%i。如果你想打印每个参数,你应该使用%s标志,这样你就不必抛出你的论点。

最后但并非最不重要的是,在您的代码中,您不会打印参数,而是输出值的指针。 6似乎指向54,这是它的ASCII值。 要打印该值,您可以执行以下操作:

printf("%d\n", atoi(argv[1]));

OR printf("%s\n", argv[1]);