如果file为null,我的代码返回分段错误,如果罚款不为空,则返回罚款?

时间:2014-08-26 05:48:50

标签: c file

我正在尝试将源文件复制到目标文件,如果存在目标文件,则交互用户或要求用户覆盖,如果它是空的,则将其复制到目标文件

如果文件为空,我的代码返回分段错误,如果罚款不为空,我的代码是罚款吗?请帮帮我解决?

 #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);
}

2 个答案:

答案 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"(写入)模式打开它,因此它将创建一个文件并复制内容!