我一直在试图弄清楚这段代码在文件中的读取方式。我一直试图让它工作,但它每次都崩溃。有人可以解释这应该如何读取文件。?
#include <stdio.h>
main(argc,argv)
int argc;
char **argv;
{
FILE *fo1, *fo2,*fp1, *fopen();
char *foobar;
argc--; argv++;
foobar = *argv;
fp1=fopen(foobar,"rb");
argc--; argv++;
foobar = *argv;
fo1=fopen(foobar,"wb");
argc--; argv++;
foobar = *argv;
fo2=fopen(foobar,"wb");
程序在第三个“argv ++”崩溃。我假设argv应该为fp1获取我想要读入的文件的地址,然后它是内存中创建另外两个文件的位置(fo1,fo2)但是在argv的第一次增量之后它变为null并且没有任何反应
答案 0 :(得分:2)
argv
是一个指向包含命令行参数的数组的指针。 argv[0]
是指向包含程序文件名的字符串的指针; argv[1]
指向一个包含第一个命令行参数的字符串;等
argc
告诉你有多少个参数(包括程序的名称)。因此,在假设传入了多少参数之前,正确的代码应该检查这一点。如果您将argv
索引到最后一个参数之外的一个元素,那么您将获得NULL
。将其编入索引之外是未定义的行为(您正在读取超出数组末尾的行为)。