2011-02-10 5 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"저장 프로그램을 방지 할 수 있습니다?

EDIT2 : 당신은 secondbuffer을 NULL로 종료 할 필요가

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

답변에 감사드립니다. 지금은 코드를 편집 할 수 없지만 다시 작성하겠습니다. – Janman