2011-02-10 16 views
0

ねえ。 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ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌ...

がどのように私は、ファイル内の "I" saveプログラムを防ぐことができますか?

EDIT2:あなたはsecondbufferをゼロ、終了する必要が

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

。ストリームから読み込んだすべての文字を追加していますが、末尾のNULLは含まれません。 fout前の行に

、問題はあなたのファイルにはヌル文字がないことである

secondbuffer[j]='\0\'; 
+0

あなたは私の編集をチェックしてくださいことはできますか? 私はまだ問題があります。 (私はコードが非常に悪いと知っていますが、私はプログラミングがうまくいかないことを理解しています) – Janman

+0

問題は今、jj = lengthoffile-1です。あなたは==長さの長さである必要があります。 (実際は、 'firstfileBuffer'を終端してnullになっているので)コピーループの前に' lengthoffile ++; 'を実行するだけです。これにより、nullが確実にコピーされます。そして、あなたは 'jj'を完全に取り除くことができます。 – AShelly

+0

あなたは編集した編集をチェックしていただけますか? (:D) 私はまだ動作しません。 – Janman

0

を追加します。あなたがファイルを読むとき、あなたは "abc"をうまく取得するが、宣言されたときにsecondbufferに座っていたゴミはまだ残っているので、 "abc"を先頭に書いておくと、5001の長さの配列「abc」で始まるごみのループのためにあなたの後

secondbuffer[i] = '\0';を追加

してみてください。

+0

あなたは私の編集をチェックしていただけますか? 私はまだ問題があります。 (私はコードが非常に悪いと知っていますが、私はプログラミングがうまくいきません。ご理解ください) – Janman

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; 
} 
+0

THanks for the answer。今は自分のコードを編集できませんが、書き直します。 – Janman

関連する問題