无法弄清楚如何正确存储命令行参数

时间:2017-11-14 00:42:41

标签: c arguments command-line-arguments main

我需要存储两个命令行参数,但我无法弄清楚如何正确执行此操作。我的代码当前存储了一个不正确的int(如果我将第二个变量设置为空)并给出一个错误,指出无效的初始化。我尝试使用strcpy和strcat初始化name,但这并没有帮助,因为我得到的错误主要与转换有关。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>

int main(int argcount, char *args[])
{
   int number = *args[1];
   char name[] = *args[2];


   printf("number is %d and name is %s\n", number, name);

   return 0;
}

2 个答案:

答案 0 :(得分:1)

以下是您的主要功能:

int main(int argcount, char **args)
{
   int number = atoi(args[1]); // atoi() converts your string to an int
   char *name = args[2]; // Do not dereference twice, otherwise you get a char


   printf("number is %d and name is %s\n", number, name);

   return 0;
}

int number = *args[1];错误,因为args[1]是您的第一个参数,而*argv[1](或argv[1][0])是您论证的第一个字母。将其放在number变量中实际上会导致第一个参数的第一个字母的ASCII值存储在number中。这绝对不是你想要的。

char name[] = *args[2];也不正确,因为在这里,您正在尝试获取第二个参数(*args[2]args[2][0])的第一个字母,这是一个类型{ {1}}并将其放在char

的数组中

您可能还想检查程序获取的参数数量以及这些参数是否格式正确,否则您的程序可能会崩溃!

答案 1 :(得分:-1)

请注意所有cmdline参数都以字符串(一系列字符)给出,因此如果您想将它们用作字面含义,则必须转换它们:

#include <stdlib.h>

int number = atoi(args[1]);
char *name = args[2];

如果您要复制args[2],则应使用strcpy

#include <string.h>

char name[1+strlen(args[2])];
strcpy(name, args[2]);

// Now this works:
printf("number is %d and name is %s\n", number, name);

最后,建议您检查是否有足够的参数,以便您不会超出args的范围。