C++ visualc&x2B+;断言错误
我正在创建一个程序来复制文本文件。我有一个main.cpp文件,它读入filenamein数组给出的文本文件,然后输出filenameout数组给出的文本文件的副本。我在FileUtilities.h中声明了这个函数C++ visualc&x2B+;断言错误,c++,assertion,C++,Assertion,我正在创建一个程序来复制文本文件。我有一个main.cpp文件,它读入filenamein数组给出的文本文件,然后输出filenameout数组给出的文本文件的副本。我在FileUtilities.h中声明了这个函数 bool textFileCopy(char filenamein[], char filenameout[]); 然后FileUtilities.cpp包含 #include <iostream> #include <fstream> #include
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;
}
#包括
#包括
#包括
#包括“FileUtilities.h”
bool FileUtilities::textFileCopy(char filenamein[],char filenameout[])
{
ifstream-fin(filenamein);
如果(fin.is_open())
{
流fout(文件名输出);
字符c;
while(fin.good())
{
fin.get(c);
在fin
或fout
上检查相应的filenameXX
,它不能为NULL
错误在哪里?在fin
或fout
上检查相应的filenameXX
,它不能为NULL
或filEnMault[/CODL>OUT为null,因此错误。如果使用<代码> STD::String 而不是C字符串,则不必担心空指针。因为您已经使用C++ I/O库,所以没有理由不使用<代码> STD::String
也就是说,您的函数也是不正确的,因为在使用提取的字符之前,您没有检查get()
调用是否成功。您还返回true
,即使复制在文件中部分失败
以下是此函数的正确实现(但请注意,它几乎肯定不是最优的;它只是演示了如何正确编写您拥有的函数):
<> >代码>文件名 >或代码>文件名> /COD> > OUT为零,因此错误。如果使用<代码> STD::String 而不是C字符串,则不必担心空指针。因为您已经使用C++ I/O库,所以没有理由不使用<代码> STD::String
也就是说,您的函数也是不正确的,因为在使用提取的字符之前,您没有检查get()
调用是否成功。您还返回true
,即使复制在文件中部分失败
以下是此函数的正确实现(但请注意,它几乎肯定不是最优的;它只是演示了如何正确编写您拥有的函数):
很明显,filenamein
或filenameout
是空指针。告诉我们如何调用textFileCopy
。你应该将文件分块复制,而不是逐字符复制。很明显,filenamein
或filenameout
是空指针。告诉我们如何调用textFileCopy
。你应该复制我现在修复了它,文件名在我的main.cpp文件中设置为null。谢谢。我现在修复了它,文件名在我的main.cpp文件中设置为null。谢谢
bool textFileCopy(std::string filenamein, std::string filenameout)
{
// Open the input stream
std::ifstream in(filenamein.c_str());
if (!in)
return false;
// Open the output stream
std::ofstream out(filenameout.c_str());
if (!out)
return false;
// Do the copy
char c;
while (in.get(c) && out.put(c));
// Ensure that the whole file was copied successfully
return in.eof() && out;
} // The input and output streams are closed when the function returns