Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ visualc&x2B+;断言错误_C++_Assertion - Fatal编程技术网

C++ visualc&x2B+;断言错误

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

我正在创建一个程序来复制文本文件。我有一个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;
}
#包括
#包括
#包括
#包括“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