我对我当前的代码有轻微的问题,并尝试检查在尝试继续该程序之前已将参数传递给枚举;
enum arg {argName, sineArg, sampleArg, argC}eargs;
int main(int argc, char *argv[]){
long samplingRate = atol(argv[sampleArg]);
float sineFreq = atof(argv[sineArg]);
if (argC < eargs ){
printf("Usage: sineFreq\tsamplingRate\n");
}else{}
}
代码编译很好,但是当没有参数运行时,程序返回&#34;分段错误:11&#34;而不是我想要打印到控制台的用法消息。
答案 0 :(得分:1)
在访问argv[...]
编辑:检查本身也是错误的(eargs
未定义;你应该写
int main(int argc, char *argv[]) {
if (argc < argC) /* --> you should change you naming conventions! */
return EXIT_FAILURE;
long samplingRate = atol(argv[sampleArg]);
答案 1 :(得分:0)
您需要将argC
更改为argc
,在if语句中... c区分大小写!
答案 2 :(得分:0)
您的使用情况检查是针对与传递的命令行参数数量无关的eargs
。无论您传递了多少参数,eargs
始终都是0
。
此外,您应该使用任何命令行参数检查之前的。将条件放在main()
:
#include<stdio.h>
#include <stdlib.h>
enum arg {argName, sineArg, sampleArg, argC}eargs;
int main(int argc, char *argv[]) {
/* if ( argc < 3) would be explicit and clear here */
if (argc < argC ) { /* You expect at least two arguments */
printf("Usage: sineFreq\tsamplingRate\n");
return 1; // return from main on failure
}
long samplingRate = atol(argv[sampleArg]);
float sineFreq = atof(argv[sineArg]);
....
}
我在使用printf()
和atol()
答案 3 :(得分:0)
当你运行没有参数的代码时,这个
long samplingRate = atol(argv[sampleArg]);
访问argv [2],这是未定义的行为,因为你没有提供足够的args(只有argv [0] =程序名称和argv [1] = NULL表示结束argv [])。