2011-03-01 9 views
0
char fname[256]; 
printf("Enter file name\n"); 
scanf("%123s",fname); 
strcat(fname,".txt"); 

FILE *inputf; 
inputf=fopen(fname,"w"); 

if (inputf!=NULL) 
    printf("found"); 
else 
    printf("not found"); 

맹 글링 문제는 내가 입력 한 파일 이름에 관계없이 null pointer.can 하나를 설명하는 이유는 무엇입니까 ??인수로 파일 이름을 전달하는 중

+0

무엇이 문제입니까? – Gorgen

+0

이 코드를 어떤 환경에서 실행합니까? 너 자신의 컴퓨터? 공유 된 단말기, 아마도 학교 PC? 다른 곳으로의 Ssh 액세스? linux를 사용한다면 "ls -l"의 결과는 무엇입니까? 왜냐하면 파일 시스템에 쓸 수있는 권한이 부족하기 때문입니다. –

+0

내 시스템에서 코드를 잘 컴파일합니다. "w"매개 변수로 종료하지 않으면 파일을 작성합니다. @junjanes가 제안한 것을 확인해야합니다. – Mahesh

답변

3

fopen (파일 이름, "w")은 새 파일을 만듭니다. 따라서 합법적 인 파일 이름을 입력하고 적절한 파일 시스템 권한을 가지고 있다면 성공해야합니다.

기존 파일을 열려고하는 경우, 사용

fopen(filename, "r") 

(이하 "R"모드를 주목하라, 대신에 "W"의.)

+0

하지만 새 파일은 어디에도 없습니다. ??? –

+0

@samir - 매개 변수는 "r +"여야합니다. 읽기 및 쓰기 모두에 대해 이미 존재하는 파일을 지정합니다. 파일이 있어야합니다. – Mahesh

+0

아니, 만약 내가 하드 디스크에 완전히 새로운 텍스트 파일을 만들고 싶다면? –

0

하지 않음이 :

char fname[256]; 
printf("Enter file name\n"); 
scanf("%123s",fname); 
strcat(fname,".txt"); F 
FILE *inputf; inputf=fopen(fname,"w"); // <--!!! 
if (inputf!=NULL) printf("found"); 
else printf("not found");

but this instead:

char fname[256]; FILE *inputf;

inputf=fopen(fname,"w");
printf("Enter file name\n");

// you know that you can't ever, EVER use scanf() so // remove this time bomb and use something else scanf("%123s",fname);

strcat(fname,".txt"); inputf=fopen(fname,"w"); if (inputf!=NULL) { printf("found"); } else { printf("not found"); }

이제 NULL이 아닌 포인터는 무엇입니까? 코드를 컴파일 할 수 없으므로 NULL이 무엇인지 알 수 있습니까?

--pete

+0

파일이 발견되지 않으면 inputf가 null이어야합니다. 시스템 .. 그래서 내가 잘못된 파일 이름을 입력해도 NULL이 아닙니다. –

+0

그리고 scanf보다 나은 옵션을 알려주시겠습니까 ?? –

+0

@ Pete : 나는 뭔가를 놓치고 있어야합니다. 왜 원래 코드가 컴파일되지 않아야합니까? – dappawit

관련 문제