2012-09-17 7 views
0

다음 C 코드를 사용하여 전달한 배열을 인쇄하려고합니다. 각 줄마다 16 진수 형식의 텍스트를 출력해야하며 파일을 여는 데 문제가 없습니다. . 처음 썼을 때 출력 파일을 열었을 때 문제가 없었고 배열도있었습니다. 내가 fileOutName 매개 변수를 변경하고 지금 내가 그것을 다시 시도하고 아무것도 다른 것을 인쇄하려고 아무것도 인쇄 할 수 없어 아무것도 작동하지 않는 것. 또한 내가 디버그 할 때 pOutfile 나쁜 포인터입니다 같아요,하지만 그것은 여전히 ​​그것에 아무것도 쓸 수 없습니다 파일을 만듭니다 말했다. 어떤 도움을 주시면 감사하겠습니다. 감사합니다fprintf가 파일에 쓰지 않습니다.

printoutput(int output[], char * fileOutName){ 
    int i = 0; 
    FILE * pOutfile; 
    pOutfile = fopen(fileOutName, "w"); 
    while(output[i] != 0){ 
     fprintf(pOutfile, "0x%0.4X\n", output[i]); 
     i++; 
    } 
} 
+3

항상 플러시 :-)'fflush (pOutfile);' – oldrinb

+0

또한'fopen'의 반환을 확인하십시오. 이는 오류를 처리하는 것이 거의 필수적인 API 사례 중 하나입니다. 그것들은 매우 일반적입니다 (예를 들어 쓰기 권한, 누락 된 미디어, 이미 존재하지만 잠긴 파일, 응용 프로그램 (예 : Windows의/proc 또는 PRN)에서 사용할 수없는 불가사의 한 파일). –

답변

8

항상 자신을 정리하십시오. fclose(pOutfile)이 누락되었습니다.

+0

와우 덕분에! – farnett

1

그것은 출력 16 진수 형식으로 각 행에 하나의 텍스트 ...

이 줄

fprintf(pOutfile, "0x%0.4X\n", 5); 

항상 같은 수의 포맷해야 - 5을. 아마이어야합니다

fprintf(pOutfile, "0x%0.4X\n", output[i]); 
+0

죄송합니다. 나에게 오류가있어서 테스트를 위해 5 번을 사용하고 다시 변경하는 것을 잊어 버렸습니다. ( – farnett

0

배열의 범위를 벗어나는 요소가 0으로 계산됩니다. 명시 적으로 설정하지 않는 한, 그렇지 않을 수도 있습니다. 너라면 괜찮아. 일반적으로 크기와 함께 배열을 전달합니다. 이것은 더 안전하고, 읽기 쉽고, 휴대가 용이합니다.

printoutput(int output[], int size, char * fileOutName){ 
    int i=0; 
    FILE * pOutfile; 
    pOutfile = fopen(fileOutName, "w"); 
    while(i!=size){ 
     fprintf(pOutfile, "0x%0.4X\n", output[i]); 
     ++i; 
     } 
    fclose(pOutfile) 
} 

또한 포스트 증가 대신 사전 증가 연산자를 사용하는 것이 좋습니다. 이와 같은 상황에서는 차이가 나지 않지만 큰 입력이나 복잡한 유형의 경우 실행 시간이 단축 될 수 있습니다. 그러므로 ++ ++ 대신에 ++.

관련 문제