所以我对命令行参数在C中的工作原理感到困惑...所以我有这些命令行参数,我正在给:
./myclient1 MyPCName 12 7894
所以我想把argv[2] (12)
读成一个字符串......但我确切地想知道如何在命令行中存储值。我查看了this SO帖子,this这个link,但我仍然感到困惑...... argv[2]
的数据类型是什么?它是整数吗?或者所有命令行参数都是字符串?所以argv[2]
实际上是:
argv:
[0]
[1]
[2] --> 1 | 2 | \0
我真的很困惑....目前,我只是使用atoi()
转换为整数,然后使用snprintf
转换回字符串,但它无法正常工作我是想知道我是否需要这样做。
我是C的新手,所以任何帮助都将不胜感激,谢谢!!
[编辑]
这是我以前做过的事情:
int main(int argc, char *argv[])
{
clientID = atoi(argv[2]);
snprintf(clibuff,300,"%d",clientID); //now clibuff has the value of
//clientID in a string.
}
答案 0 :(得分:3)
命令行参数存储为以零结尾的字符串数组。
因此,要回答您的问题,argv[2]
的类型为char *
argv
的类型为char **
答案 1 :(得分:2)
以下是关于CLI参数的一些很好的解释:
http://www.tutorialspoint.com/cprogramming/c_command_line_arguments.htm
https://en.wikibooks.org/wiki/A_Little_C_Primer/C_Command_Line_Arguments
答案 2 :(得分:1)
托管C实现(例如你肯定使用的)只允许main()
的两个签名,如果你想访问命令行参数,那么只有一个会做:
int main(int argc, char *argv[]);
你可以用其他几种相同的方法拼写它,但我更喜欢那种,因为它强调argv
的数组性质。当然,每个元素都指向包含相应命令行参数的标准C字符串的第一个字符之一。因此,argv[2]
的类型始终为char *
,您不需要做任何特殊处理就可以将其作为C字符串处理。
答案 3 :(得分:1)
您的测试代码的副本会很有用..
我通常用这种方式声明argv:
int main(int argc, char **argv);
当程序启动时,main的参数将初始化为:
此测试程序应该有效:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
while(argc--)
printf("%s\n", *argv++);
exit(EXIT_SUCCESS);
}
答案 4 :(得分:0)
argv [0]始终是程序的名称,是的,你的所有参数都是字符串,你应该计算自argv [1]以来的参数。