我有以下简单的代码,但是当我在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");
}
答案 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)
以避免不必要的警告。
同样您的文件可能不在您执行代码的当前目录中。因此,请将完整路径添加到您的文件中。