我正在尝试将源文件复制到目标文件,如果存在目标文件,则交互用户或要求用户覆盖,如果它是空的,则将其复制到目标文件
如果文件为空,我的代码返回分段错误,如果罚款不为空,我的代码是罚款吗?请帮帮我解决?
#include<stdio.h>
int main(int argc,char**argv)
{
char ch,us;
FILE *fp,*fp1;
fp1=fopen(argv[2],"r+");// i want to use r+ mode only
if(fp1!=NULL)
{
printf("do u want to overwrite\n");
scanf("%c",&us);
if(us=='y');
else
return;
}
fp=fopen(argv[1],"r"); // its good when file is not NULL but
//its segmentation fault when fp1 is empty?
while((ch=fgetc(fp))!=EOF)
fputc(ch,fp1);
}
答案 0 :(得分:0)
在您的情况下,fp1
在您尝试在while
循环中写入它的位置为NULL。除此之外,您应该截断目标文件以清除旧数据,因此重新打开"w"
。
您应该将代码更新为
fp1=fopen(argv[2],"r+");// i want to use r+ mode only
if(fp1!=NULL)
{
fclose(fp); //close the file
printf("do u want to overwrite\n");
scanf("%c",&us);
if(us=='y');
else
return;
}
fp1=fopen(argv[2],"w"); //open with write.
fp=fopen(argv[1],"r");
答案 1 :(得分:0)
如果您使用命令行参数,则必须检查用户输入!
if(argc != 3){
printf("Usage: ./Exefile Srcfile Destfile\n");
return ;
}
我认为由于文件导致的segmentation fault
错误可能无法创建或者不存在!如果您的目标文件不存在,则表示它将显然返回segmentation fault
。
如果您的目标文件为null,请尝试以"w"
(写入)模式打开它,因此它将创建一个文件并复制内容!