【发布时间】:2011-04-30 20:32:12
【问题描述】:
我正在创建一个复制文本文件的程序。我有一个 main.cpp 文件,它读取由 filenamein 数组给出的文本文件,然后输出由 filenameout 数组给出的文本文件的副本。我在 FileUtilities.h 中声明了这个函数
bool textFileCopy(char filenamein[], char filenameout[]);
那么 FileUtilities.cpp 包含
#include <iostream>
#include <fstream>
#include <string>
#include "FileUtilities.h"
bool FileUtilities::textFileCopy(char filenamein[], char filenameout[])
{
ifstream fin(filenamein);
if(fin.is_open())
{
ofstream fout(filenameout);
char c;
while(fin.good())
{
fin.get(c);
fout << c;
}
fout.close();
fin.close();
return true;
}
return false;
}
当我编译这个时,我得到一个 Visual C 断言失败。我得到一个标题为“Microsoft Visual C++ 调试库”的对话框,其中包含以下内容:
“调试断言失败!
程序:.....Parser.exe
文件 f:\dd\vctools\crt_bld\Self_x86\crt\src\fopen.c
第 53 行
表达式:(file!=NULL)"
此错误为我提供了 3 个选项:中止、重试或忽略。 中止只是停止调试。重试会在 Visual Studio 中显示一条消息,显示“program.exe 已触发断点”。如果我在此处单击 break,Visual Studio 会打开一个名为“fopen.c”的文件并指向该文件中的第 54 行。
如果我从这一点继续,Visual Studio 会打开另一个名为“dbghook.c”的文件,其中包含指向第 62 行的指针。
【问题讨论】:
-
嗯,很明显,
filenamein或filenameout是 NULL 指针。告诉我们你如何称呼textFileCopy。 -
你应该大块复制文件,而不是一个字符一个字符。