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

时间:2015-01-21 07:10:43

标签: c++ vector ofstream

我需要合并两个文本文件,方法是将它们放在一个矢量数组中,然后将它们写入一个新的文本文件中。 合并后。新文件有额外的字符。

FE:

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

缓冲区的内容:" text1 text2。 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;

       }

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

1 个答案:

答案 0 :(得分:0)

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

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

关于˙

请查看istream::get返回值:

返回值

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

所以,您可以将循环更改为:

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