C-命令行参数作为字符串?
所以我不知道命令行参数在C中到底是如何工作的。。。我给出了以下命令行参数:C-命令行参数作为字符串?,c,command-line,C,Command Line,所以我不知道命令行参数在C中到底是如何工作的。。。我给出了以下命令行参数: ./myclient1 MyPCName 12 7894 所以我想把argv[2]12读作一个字符串。。。但我对命令行中的值是如何存储的感到困惑。我看了这两个帖子,但我还是很困惑。。。argv[2]的数据类型是什么?它是整数吗?或者所有命令行参数最初都是字符串?所以argv[2]实际上是: argv: [0] [1] [2] --> 1 | 2 | \0 我真的很困惑。。。。目前,我只是
./myclient1 MyPCName 12 7894
所以我想把argv[2]12读作一个字符串。。。但我对命令行中的值是如何存储的感到困惑。我看了这两个帖子,但我还是很困惑。。。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.
}
命令行参数存储为以零结尾的字符串数组 为了回答您的问题,argv[2]的类型是char*
argv的类型是char**以下是一些有关CLI参数的重要解释:
您肯定正在使用的托管C实现只允许main有两个签名,如果您希望访问命令行参数,则只有一个可以:
int main(int argc, char *argv[]);
您可以用其他两种等效的方式来拼写它,但我更喜欢这种方式,因为它强调了argv的数组性质。当然,每个元素都指向包含相应命令行参数的标准C字符串的第一个字符之一。因此,argv[2]的类型始终是char*,您不需要做任何特殊的事情来将其作为C字符串处理。测试代码的副本将非常有用 我通常这样声明argv:
int main(int argc, char **argv);
当程序启动时,main的参数将被初始化为:
argc大于零。
argv[argc]是空指针。
argv[0]到argv[argc-1]是指向字符串的指针
argv[0]将是包含程序名称的字符串,如果不可用,则为空字符串。
argv的其余元素表示提供给程序的参数。
这个测试程序应该可以工作:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
while(argc--)
printf("%s\n", *argv++);
exit(EXIT_SUCCESS);
}
argv[0]始终是您程序的名称,是的,您的所有参数都是字符串。您应该计算argv[1]之后的参数。请发布一些您尝试过的代码。所有命令行参数都是字符串。哦。。。谢谢,我明白了。所以我的理解基本上是正确的。然后12被存储为一个字符串,带有一个字符数组…谢谢。。。我认为这个答案让事情变得更清楚了。