无法弄清楚如何正确存储命令行参数[关闭]
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