【发布时间】:2015-05-27 18:24:21
【问题描述】:
我正在尝试编写一个 C 程序,其中用户必须在命令行中输入两个参数。首先,它们必须提供要读取的值的文本文件的名称。其次,它们必须提供 0 或 1 的值,该值将保存为整数以用作布尔值(0=false,1=true)。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
FILE *f;
char *fname;
int boolVal;
if (argc != 2){
printf("This program requires two input types, data file and boolean value of 0 or 1\n");
return 1;
}
fmame = argv[1];
boolVal = argv[2];
printf("The file name is %s and the boolVal is %d.\n", fmame, boolVal);
f = fopen(fname, "r");
if (f == NULL) perror ("Could not open file");
else {
if (fgets(myStr, 1000, f) != NULL )
puts(myStr);
fclose(f);
}
return 0;
}
我收到一个错误:
testArg.c: In function ‘main’:
testArg.c:16: warning: assignment makes integer from pointer without a cast
我有两个问题:我读入的文件名是否正确?二、如何解决铸造问题?
【问题讨论】:
-
这不是错误,而是警告。
-
在 C 中,它实际上是对大多数编译器的警告。这是不正确的,但技术上可以在静态级别上做到@danielfranca。
-
@danielfranca,这是违反约束的,编译器必须至少发出警告,但也可能拒绝编译。换句话说,这个警告应该被视为错误。
-
如果参数数量不正确(应该是 3,而不是 2,因为程序名称是 argv[0]),程序返回 -1 那么为什么程序返回成功指示 (0)无法打开文件?
标签: c string command-line-arguments compiler-warnings strtol