C参数转换
首先,我必须说我对C语言编程是新手。我要做的是编写一个程序,它接受一个参数输入并将其转换为整数,然后返回其值。我的代码如下所示:C参数转换,c,arguments,C,Arguments,首先,我必须说我对C语言编程是新手。我要做的是编写一个程序,它接受一个参数输入并将其转换为整数,然后返回其值。我的代码如下所示: #include <stdio.h> #include <stdlib.h> int main (int argc, char *argv[]) { int fromArgv = NULL; /* holds value from argv[1] */ fromArgv = atoi (argv[1]); /* conve
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
int fromArgv = NULL; /* holds value from argv[1] */
fromArgv = atoi (argv[1]); /* convert argv[1] to int */
/* if incorrect no. of arguments entered */
if (argc != 2) {
fprintf (stderr, "error: wrong number of arguments\n");
exit (EXIT_FAILURE);
}
return fromArgv;
}
NULL
是一个空指针常量,您试图将其赋给整数值(fromArgv
),因此编译器会报告一个警告
以下初始化工作正常:
fromArgv = 0;
尽管如此,它是无用的,因为您正在下一行修改变量的值:
int fromArgv = atoi(argv[1]);
顺便说一句,从
main
返回此类值是个坏主意(它通常保留给错误代码),而且您检查参数的数量太晚了。您的问题是行
int fromArgv = NULL;
我相信NULL
通常被定义为(void*)0
,这是一个指针。您正在将此指针指定给一个int
变量,该变量会给出错误信息
但是,在这种情况下,不需要从argv初始化。您只需执行以下操作:
int fromArgv; /* holds value from argv[1] */
fromArgv = atoi (argv[1]); /* convert argv[1] to int */
甚至只是
int fromArgv = atoi (argv[1]); /* convert argv[1] to int */
但是,您需要做的是确保在访问它之前存在argv[1]
,这样,如果用户没有输入任何命令行参数,您就不会得到segfault。如果(argc!=2)
测试在从argv
赋值之前,您应该将测试从argv移动到NULL,因为NULL是指针,而您正在将它赋值给int
只需将行从argv更改为int 为什么必须从argv初始化
只是
应该可以正常工作正如其他人提到的,您正在使用“空指针”(从类型的角度来看是指针)初始化一个整数,这是错误的。你想把它初始化为零
int fromArgv = 0;
然后,您应该选择参数并在之后而不是在检查参数数量之前将其转换为int。因此,您应该将“atoi”行移动到if(argc!=2)
部分之后
还可以考虑使用strtol
而不是atoi
。前者允许您检查转换是否成功。作为旁注,我不禁想知道,为什么您要先尝试获取参数的值,然后才检查它是否真的被给定了(使用argc!=2
),就像今天的难看转换一样:int fromArgv=(int)NULL
会起作用。@alk为什么它不能像int fromArgv=atoi(argv[1])
那样编写呢?我想知道.int不能包含NULL(不是指针),当程序没有失败时,返回0以外的值不是一个好主意,最好打印f(“%d\n”,fromArgv)OT:除非您确定不向它传递任何东西,否则不要使用atoi()
,计算结果为0
,因为0
也会在出错时返回。改为使用strtol()
。atoi()
不喜欢NULL
。非常感谢您向我解释这一点。现在我明白了,它也起作用了。
int fromArgv = atoi(arg[1]);
int fromArgv = 0;