繁体   English   中英

从C中的命令行参数打印整数

[英]Printing integers from command line arguments in C

我正在使用一些命令行参数运行程序。 但是,当我输入10、10、10并打印出来时,它会打印出49、49、49。这是我的代码:

int main(int argc, char *argv[]) {
    int seed = *argv[0];
    int arraySize = *argv[1];
    int maxSize = *argv[2];

为什么会这样?

好吧, argv是一个指向字符串的指针数组。 所有命令行参数均以字符串形式传递,并且指向每个参数的指针由argv[n]保留,其中参数的顺序为n+1

对于托管环境,请引用C11第§5.1.2.2.1章。

如果argc的值大于零,则argv[0]指向的字符串表示程序名称 如果程序名称在主机环境中不可用,则argv[0][0]应为空字符。 如果argc的值大于1,则argv[1]argv[argc-1]指向的字符串代表程序参数。

所以,显然,对于像

./123 10 10 10 // 123是二进制名称

  • argv[0]不是第一个“传递给程序的命令行参数”。 它是argv[1]
  • *argv[1]不返回您作为命令行参数传递的int值。

    基本上, *argv[1]为您提供该字符串的第一个元素的值(即char'1' ),最有可能采用ASCII编码值(您使用的平台),并根据ascii表 a您会看到'1'的十进制va; lue为49

解决方案:您需要

  • 检查参数数量( argc
  • 循环遍历每个参数字符串argv[1] ~ argv[n-1]argc == n
  • 将每个输入字符串转换为int (在这种情况下,您可以使用strtol()

取消引用字符串( *argv[x] )会得到一个char (字符串中第一个char的值),在这种情况下,值是ASCII'1 '1' :十进制49

您可以使用strtol转换这些字符串(无需取消引用)

int arraySize = (int)strtol(argv[1], NULL, 10);

无论如何, argv[0]是您的程序的名称,您确定程序名称以1开头吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM