复制文件时出现分段错误

时间:2013-09-14 16:28:37

标签: c++

我有以下简单的代码,但是当我在unix上使用GCC编译和运行时,我得到了分段错误。是因为文件命名或将一个文件复制到其他人。任何帮助表示赞赏..

#include <iostream>
#include <stdio.h>

using namespace std;

void copy(char *infile, char *outfile) {
    FILE *ifp; /* file pointer for the input file */
    FILE *ofp; /* file pointer for the output file */
    int c; /* character read */
    /* open i n f i l e for reading */
    ifp = fopen (infile , "r" );
    /* open out f i l e for writing */
    ofp = fopen(outfile, "w");
    /* copy */
    while ( (c = fgetc(ifp)) != EOF) /* read a character */
        fputc (c, ofp); /* write a character */
    /* close the files */
    fclose(ifp);
    fclose(ofp);
}

main() 
{
copy("A.txt","B.txt");
}

3 个答案:

答案 0 :(得分:1)

您发布的代码是正确的

 ifp = fopen (infile , "r" );  //will return NULL if file not there 

 while ( (c = fgetc(ifp)) != EOF)     

您使用的那一刻,如果您当前目录中没有A.txt文件,则有可能出现分段错误。

答案 1 :(得分:1)

如果A.txt不存在,则ifp的值将为NULL(0)。然后,这个函数调用将是段错误。

fgetc(ifp)

因此,更改代码以检查文件打开时是否为NULL(每个文件),例如:

ifp = fopen (infile , "r" );
if (ifp == NULL) {
    printf("Could not open %s\n", infile);
    exit(-2);
}

您可能还必须在文件顶部添加此包含内容:

#include <stdlib.h>

答案 2 :(得分:0)

在参数中使用copy(const char* infile, const char* outfile)以避免不必要的警告。

同样您的文件可能不在您执行代码的当前目录中。因此,请将完整路径添加到您的文件中。