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 我真的很困惑。。。。目前,我只是

所以我不知道命令行参数在C中到底是如何工作的。。。我给出了以下命令行参数:

 ./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被存储为一个字符串,带有一个字符数组…谢谢。。。我认为这个答案让事情变得更清楚了。