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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法弄清楚如何正确存储命令行参数[关闭]相关的知识,希望对你有一定的参考价值。

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

#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
", number, name);

   return 0;
}
答案

这是你的主要功能应该是什么样子:

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
", 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]),这是一个类型char并把它放在char数组中。

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

另一答案

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

#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
", number, name);

最后,建议您检查是否有足够的参数,以便您不会访问args

以上是关于无法弄清楚如何正确存储命令行参数[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 mypy 进行类型检查,我无法弄清楚为啥会发生此错误 [关闭]

如何正确访问通过从标准输入引用构造函数传递的参数的值?

无法弄清楚如何正确使用 KeyboardAvoidingView

C++:无法弄清楚如何正确隐藏实现细节

无法弄清楚如何正确设置 DropdownButton 的样式

使用 swift 我无法弄清楚视频停止后如何进入新屏幕