嘿。 我在使用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;
答案 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;
}