C - 命令行参数为字符串?

时间:2015-09-28 20:34:47

标签: c command-line

所以我对命令行参数在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.
}

5 个答案:

答案 0 :(得分:3)

命令行参数存储为以零结尾的字符串数组。

因此,要回答您的问题,argv[2]的类型为char *

argv的类型为char **

答案 1 :(得分:2)

答案 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的参数将初始化为:

  • 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);
}

答案 4 :(得分:0)

argv [0]始终是程序的名称,是的,你的所有参数都是字符串,你应该计算自argv [1]以来的参数。