合并两个文本文件会产生奇怪的结果

Merging two text files gives wierd results

本文关键字:结果 文件 文本 两个 合并      更新时间:2023-10-16

我需要通过将两个文本文件放在矢量数组中,然后将它们写入新的文本文件来合并它们。合并它们后。新文件包含额外的字符。

铁:

f1.txt ("text1")
f2.txt ("text2.")
f12.txt ("text1˙text2.˙W64")

缓冲区的内容:"文本 1 文本 2。W64"

这是代码:

int main(){
       enum errorcode{FNF,FNC};
       vector<char> buffer;
       char ime[255];
       cin>>ime;//first file
       ifstream ud1(ime,ios::in);
       if(ud1.is_open()){
                        while(!ud1.eof())buffer.push_back(ud1.get());
                        ud1.close();
                        }
       else {cout<<"File not found.";return FNF;}
       cin>>ime;//second file
       ifstream ud2(ime,ios::in);
       if(ud2.is_open()){
                         while(!ud2.eof())buffer.push_back(ud2.get());
                         ud2.close();
                         }
       else {cout<<"File not found.";return FNF;}
       cin>>ime;//new file
       ofstream id(ime,ios::out);
       if(id.is_open()){
                        for(int i=0;i<buffer.capacity();i++)id.put(buffer[i]);
                        id.close();
                        }
       else {cout<<"File not created.";return FNC;}
       return 0;
       }

我想这是因为记事本或文件本身。你能告诉我原因吗?

您正在使用 矢量容量:返回当前为矢量分配的存储空间的大小,以元素表示。

必须使用矢量大小: 返回矢量中的元素数。这是矢量中保存的实际对象的数量,不一定等于其存储容量。

关于 ̇

请查看 istream::get 返回值:

返回值

第一个签名返回字符读取,如果流中没有可用字符,则返回文件结束值 (EOF)(请注意,在这种情况下,还会设置 failbit 标志)。

因此,您可以将循环更改为:

while(!ud1.eof()){
    int tmpChar = ud1.get();
    if( !ud1.eof() )
        buffer.push_back(tmpChar);
}