如果有人可以帮我解决这个令人惊讶的障碍。我试图打开一个名为“inputfile.txt”的文本文件,我不能!我看过的每个例子都运行良好,但是当我尝试使用它时,文件返回null并且我得到了一个分段错误。 注意,这是在错误检查之前
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *inputPtr;
inputPtr = fopen(argv[2], "r");
fclose(inputPtr);
}
当我第一次在桌面上创建文本文件时,我意识到我“略微”了一下,我把它命名为“inputfile.txt”,但它被保存为“inputfile.txt.txt”,就像那样奇怪! / p>
答案 0 :(得分:1)
第一个大问题是你没有检查argc
的值。此值设置为传递给程序的参数数。默认情况下,argc至少为1,因为总是传递1个参数。如果你传递任何额外的参数,argc必须大于1.在你的情况下,我猜它应该是2。
第二个问题来自第一个问题。 C中数组元素的编号从0开始,所以如果你的程序接受argc
个参数,argv
保持参数将有argc
元素,但是!最后一个元素的索引为argc-1
。默认情况下,如果没有传递其他参数,只存在argv[0]
并且它是程序的名称,它也总是被传递,因此argc始终至少为1.
在您的情况下,如果argc==2
,则argv [2]根本不存在,只有argv[0]
和argv[1]
存在。当你将一个参数传递给程序时,它将被保存在argv [1]中。这意味着此行inputPtr = fopen(argv[2], "r");
应更改为此inputPtr = fopen(argv[1], "r");
。还应该在程序开始时检查argc。
int main(int argc, char *argv[])
{
if(argc!=2)
{
printf("Wrong number of arguments\n");
return -1;
}
.....
}
答案 1 :(得分:0)
访问argv[0]
之外的任何内容(始终可用)
代码必须检查argc
的值以确保命令行参数实际存在。
请注意;在C中,数组索引从0开始(数组条目数-1)。
因此,如果argc
为2,则只有一个命令行参数,并且:
argv[0]
是执行程序名称argv[1]
是第一个参数。 argv[2]
是一个NULL指针。 所以使用argv[2]
访问地址0并将导致