我需要存储两个命令行参数,但我无法弄清楚如何正确执行此操作。我的代码当前存储了一个不正确的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;
}
答案 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
的范围。