int hailstoneLength(int n)
{
int u = n;
if(u != 1)
{
return 1 + hailstoneLength(hailNext(u));
}
else // if u = 1
{
return 1;
}
}
在我输入的命令行中
int main(int argc, char *argv[])
{
FILE *fp;
printf("%s\n", argv[0]);
printf("%s\n", argv[1]);
printf("%s\n", argv[2]);
fp = fopen(argv[1], "r");
if((fp == NULL) || strcmp(argv[0], "MySearch") != 0)
{
fprintf(stdout, "File is NULL ");
fflush( stdout );
exit(0);
}
然后
gcc Lab2.c -o MySearch
功能打印
./MySearch arr_file.txt 6
有一个名为arr_file.txt的文件,但为什么无法打开它?有人可以帮忙吗?提前致谢。
答案 0 :(得分:2)
argv[0]
是"./MySearch"
"MySearch"
strcmp()
返回非零if
的值如何,fp
条件都会得到满足。答案 1 :(得分:0)
您的argv [0]是“./ MySearch”而不仅仅是“MySearch” => strcmp(argv [0],“MySearch”)!= 0
那么你的if条件((fp == NULL)|| strcmp(argv [0],“MySearch”)!= 0)会返回true =>内部的代码块if使用Null文件通知执行。
只需在if子句中键入“MySearch arr_file.txt 6”或删除/更改strcmp(argv [0],“MySearch”)!= 0。
答案 2 :(得分:0)
您的代码正在执行strcmp("./MySearch", "MySearch)
,而永远不会评估为0
。我建议使用:
const char *filename = "./MySearch";
然后做:
strcmp(argv[0], filename)
使用perror()
从您的操作系统获取错误消息,它会提供更好的反馈。
您的代码可能如下所示:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[]) {
FILE *fp;
const char *filename = "./MySearch";
for (int i = 0; i < argc; i++) {
printf("%s\n", argv[i]);
}
fp = fopen(argv[1], "r");
if (fp == NULL || strcmp(argv[0], filename) != 0) {
perror(argv[1]);
exit(EXIT_FAILURE);
}
return 0;
}