2014-10-01 7 views
-1

도움을 받고자하는 특정 문제가 있습니다. 여기가는 방법입니다 나중에 처리하기 위해 문자 배열에 문자의 일정 금액을 읽으려면 다음 코드를 사용하고C++ 파일을 잘못 읽음

:

char str[15]; // first 16 characters that i need to get from file 

    std::ifstream fin("example.txt"); 
    if(fin.is_open()){ 
     std::cout<<"File opened successfully \n"; 
     for(int i = 0; i<=15; i++) 
     { 
      fin.get(str[i]); //reading one character from file to array 

     } 

    } 
    else{ 
     std::cout<<"Failed to open file"; 
    } 


    std::cout<<str; 

그것은 처음 4 또는 5 자에 대해 잘 작동 , 8에 도달하면 쓰레기 문자를 출력하기 시작합니다.

텍스트를 읽은 example.txt 파일의 내용. 나는 16 자 읽을 때

The Quic�j� 

출력 :

The Quick Brown Fox Jumped Over The Lazy Dog The Quick Brown Fox Jumped Over The Lazy Dog 

출력 I 8 개 문자를 읽을 때

The Quick Brown ASCII 

왜이 일어나고을 어디서 'ASCII가'시에서 왔는가 I 파일에서 특정 길이를 읽으려고합니까?

마지막으로 특정 길이의 파일을 가져 오려면 어떤 코드를 사용해야합니까? 예를 들어 처음 4 또는 8 또는 16 또는 심지어 20자를 읽고 싶습니까? 반드시 문자 배열에 있어야 할 필요는 없으며 문자열로 저장할 수 있습니다.

미리 감사드립니다.

+2

파일에서 마지막으로 읽은 문자 다음에' '\ 0'' 문자를 넣어야합니다. –

+0

std :: string line; getline (fin, line); std :: cout << line; // 게으른 개 위로 뛰어 오른 갈색 여우 – Jagannath

+0

너의 문자 배열이 커야하거나 루프가 15보다 작고 15보다 작을 필요가있다. C++은 0에서 n - 1이다. 배열 인덱스의 경우. –

답변

1

문자 배열의 길이는 15 자입니다. 너무 많은있어 그 15 같다

for(int i = 0; i<=15; i++) 

i 경우 때문에 0에서 14로 배열 카운트 : 그래서이 라인은 아웃 오브 바운드 간다.

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 < = 카운트하십시오!

문자열이 메모리에 저장 될 때 또한 그들이 널 문자 '\0'로 종료 할 필요가 14

에서 끝나는 0에서 시작 15 곳이 있습니다. 그렇지 않으면 그들을 인쇄하는 함수는 언제 쓰레기가 어디서 오는지 알 수 없습니다.

null 종결자는 공백 문자 15 중 하나를 사용하기 때문에 14 자까지만 파일에서 읽을 수 있습니다.

그래서 : 그 작동하는 경우

 for(int i = 0; i < 14; i++) 
    { 
     fin.get(str[i]); //reading 14 characters (0-13) 
    } 
    str[14] = '\0'; // add the string terminator at the end of the array. 

을 참조하십시오.

+0

오 예! 널 종결 자, 어떻게 잊을 수 있니?나는 피 묻은 바보 야. 답변 감사합니다 – Alighieri

관련 문제