2009-03-20 5 views
0

DOS의 DJGPP를 사용하여 이진 파일을 읽는 동안이 코드가 중지됩니다. 이것은 fread 호출이 이루어질 때 발생합니다. 호출이 제거되면 프로그램이 성공적으로 실행됩니다. 동일한 코드가 Visual C++ 2008을 통해 정상적으로 실행됩니다. djgpp에서 비슷한 문제가 발생한 사람이 있습니까? 나는 정말 간단한 것을 놓치고 있습니까?DJGPP의 fread 오류

char x; 
string Filename = "my.bin" ; 
fp = fopen(Filename.c_str(),"rb"); 

if (fp == NULL) 
{ 
    cout << "File not found" << endl ; 
} 

if (fseek (fp, 0, SEEK_END) != 0) 
{ 
    cout <<"End of File can't be seeked"; 
    return -1; 
} 

if ((fileLength = ftell(fp)) == -1) 
{ 
    cout <<"Can't read current position of file"; 
    return -1; 
} 

if (fseek (fp, 0, SEEK_SET) != 0) 
{ 
    cout <<"Beginning of File can't be seeked"; 
    return -1; 
} 

if (fread(&x,sizeof(x),1,fp) != sizeof(x)) 
{ 
    cout <<"file not read correctly"; 
    return -1; 
} 
+0

fread의 첫 번째 인수는 반드시 x가 아니라 & x이어야합니다. 그것은 char 버퍼에 대한 포인터를 원한다. char를 준다. –

+0

네, 고쳐졌습니다. 나는 아직도 매달린다. – vivekian2

+0

참고 : 파일을 찾을 수 없을 때 오류가 발생하지 않습니다 (스타일 등) – KevinDTimm

답변

2
  • . 그냥 'FILE * fp;'라고 가정해야합니다.

  • 실제로는 < stdio.h>가 포함되어있는 것으로 보이지 않으며 사용자가 담당해야한다고 가정해야합니다.

  • 나는 실제로 < iostream>을 포함하고 'using namespace std;'를 선언 했으므로이를 수행한다고 가정해야합니다.

  • 통화가 성공했는지 알려줄 수있는 fread() 호출 이후에 어떤 내용이 나오는지 알 수 없습니다. 실제로 오류를 재현 절대하지만 전체 최소에 결함이 코드를 줄이는 과정을 통해가는

코드의 일부는 어안이 벙벙이 때 가장 먼저해야 할 일이다.

문제가 있다고 생각하는 곳이 아닐 수도 있습니다. 말했다되고 그건

, 나는 ') perror는 ('

int i; 
if ((i = fgetc(fp)) == EOF) 
{ 
    perror("File not read correctly"); 
    return -1; 
} 
x = (char) i; 
cout << "Success, read '" << x << "'." << endl; 

사용으로

if (fread(&x,sizeof(x),1,fp) != sizeof(x)) 
{ 
    cout <<"file not read correctly"; 
    return -1; 
} 

를 교체하는 대신 cout을 homebrewn 메시지 당신에게 오류의 원인에 대한 추가 정보를 제공하려고 것입니다. 'fgetc()'를 사용하면 파일에 실제로 생각하는 내용이 포함되어 있고 한 바이트에 fread()를 사용하는 것이 드문 경우가 아니라는 것을 알 수 있습니다.

그런 다음보고하십시오.

+0

@DevSolar이 코드 이전에 많은 일을했기 때문에 문제가 발생했습니다. 펌웨어를 꺼서 fread()를 실패하게 만들었습니다. 귀하의 올바른 방향을 지적하십시오 - "문제는 당신이 생각한 곳조차도 아닙니다." – vivekian2

0

fread은 포인터를 첫 번째 매개 변수로 사용합니다. 한 문자를 읽는 것만이라면 char x;이 좋지만 대신 x 주소를 전달하십시오.

fread(&x,sizeof(x),1,fp) != sizeof(x) 

과를 sizeof 문자 이후

당신은 아주 잘 쓸 수 있습니다 (정의)는 항상 1 : 나는 'FP'이 무엇인지 표시되지 않습니다

fread(&x,1,1,fp) != 1 
+0

고정되어 여전히 응답을받습니다. – vivekian2