2013-03-07 2 views
0

.txt 파일에 쓰는 간단한 프로그램을 만들려고하지만이 코드는 작동하지 않습니다.fprintf가 작동하지 않습니다. C

#include <stdio.h> 
#include <string.h> 
#include "main.h" 

int main(int argc, const char * argv[]) 
{ 
    FILE *f = fopen("text.txt", "w+"); 
    char c[256]; 
    printf("What's your name?\n"); 
    scanf("%s", c); 
    fflush(f); 
    if (c!=NULL) 
    { 
     printf("not null\n"); 
     int q = fprintf(f, "%s", c); 
     printf("%d", q); 
    } 
    else 
    { 
     printf("null\n"); 
    } 
    printf("Hello, %s\n", c); 
    fclose(f); 
    return 0; 
} 

null가 아니다 있다는 printf 반환하고, 문자의 길이가 무엇이든 int q 돌아갑니다. 이 파일에 쓰지 않는 이유는 무엇입니까?

+1

Microsoft Visual C++에서 프로그램을 사용해 보았지만 정상적으로 작동했습니다. 작업 디렉토리에서 text.txt 파일을 관찰합니다. 환경에 대한 자세한 정보를 공유 할 수 있습니까? 또한, 왜'main.h'를 포함하고 있습니까? – Ganesh

+2

'c'는 결코 null이 아니며, 확인할 필요가 없습니다. 대신'f'가 null이 아닌지 확인하십시오. – perreal

+1

그리고 몇 가지 컴파일러 경고를 켜십시오 ... –

답변

0

나가는 올바른 권한으로 실행되지 않았습니다. 내 멍청한 실수. 당신이 그것으로 당신의 이름 문자열을 스캔 한 이후 C가 null이 아니기 때문에

1

의 printf는, null가 아니라고

그게 전부를 반환합니다.

왜이 파일에 쓰지 않습니까?

내 시스템에서 프로그램이 올바르게 작동합니다.

- 편집 - 표시되는 (귀하의 경우 권한에) 이런 식으로, 정확한 원인을 오류 처리를 수행함으로써

FILE *f = fopen("text.txt", "w+"); 
if (NULL == f) 
    perror("error opening file\n"); 

,

0

첫째로, 당신은 c 선언했습니다 로컬 범위이므로 NULL이 될 수 없습니다. 당신은 사용자가 아무것도 입력 여부를 확인하고 싶은 경우 문자열에 스캔 한 후, c의 길이를 확인 :

if (strlen(c) == 0) { 
    /// 
} 

둘째, 현재 작업 디렉토리에 쓸 수있는 권한이 있는지 여부 확인 . fopen의 반환 값을 확인해야합니다.

if (!f) { 
    fprintf(stderr, "Failed to open text.txt for writing\n"); 
} 
관련 문제