在文件中保存char问题

时间:2011-02-10 19:46:17

标签: c++ char ofstream

嘿。 我在使用ofstream将char写入文件时遇到了一些问题。 这就是代码的外观(只是为了展示它是如何工作的。这不是真正的代码)。

char buffer[5001];
char secondbuffer[5001];
char temp;
ifstream in(Filename here);
int i = 0;
while(in.get(secondbuffer) && !in.eof[])
{
i++;
}
for(int j = 0; j < i; j++)
{
secondbuffer[j] = buffer[j];
}
ofstream fout(somefile);
fout << secondbuffer;

// end of program 

问题是它读取第一个文件的字符很好,但是当它写入第二个文件时,它会添加第一个文件中的所有字符,就像它应该做的那样,但是当没有更多的字符时,它在文件末尾添加了很多“Ì”字符。

FX:

文件1: ABC

文件2: abcÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ...

如何防止程序在文件中保存“Ì”?

EDIT2:

int i = 0;
    lenghtofFile++;
    while(fin.get(firstfileBuffer[i]) && !fin.eof())
    {
        i++;
        lenghtofFile++;
    }
    firstfileBuffer[i] = '\0';

    for(int j = 0; j < lenghtofFile; j++)
    {

        if(secondfileBuffer[j] != ' ' && secondfileBuffer[j] != '\0')
        {
        secondfileBuffer[j] = function(key, firstfileBuffer[j]);
        }

    }

    secondfileBuffer[lenghtofFile]='\0';

    fout << secondfileBuffer;

3 个答案:

答案 0 :(得分:0)

您需要null-terminate secondbuffer。您正在添加从流中读取的所有字符,其中不包括尾随的NULL。

fout之前的行上,添加

secondbuffer[j]='\0\';

答案 1 :(得分:0)

问题是文件中没有终止空字符。当你读入文件时,你得到的“abc”就好了,但是当它被声明时,它位于secondbuffer中的垃圾仍然存在,所以在它的开头写“abc”意味着你有一个5001长度的数组以“abc。”开头的垃圾。

尝试添加

在你的for循环之后

secondbuffer[i] = '\0';

答案 2 :(得分:0)

这应该可以正常工作:

#include<iostream>
#include<fstream>
using namespace std;

int main()
{
  char buffer[5001];
  char secondbuffer[5001];
  ifstream in("foo.txt", ifstream::in);
  ofstream fout("blah_copy.txt");
  do
    {
      in.getline(buffer,5001);
      fout<<buffer;
    }
  while(!in.eof());
  in.close();
  fout.close();
  return 0;
}