FILE관련된 함수를 만들려고 합니다.

tni508의 이미지

파일오픈하는 함수를 만들려고 합니다. 아래와 같이 main함수에서 파일포인터와 파일명을 주고 util.c에서 파일을 열어
파일 포인터만 반환해서 쓰고 다시 닫을 순 없을까요? 아래와 같이 하면 계속 에러가 나네요..

-main.c-
FILE *fp;

main(){
getfp(fp,filename);
fprintf(fp,"test\n");
destroyfp(fp);
return 1;
}

-util.c-
int getfp(FILE *fp , char *filename){
if((fp = fopen(filename , "w")) == NULL){
printf("Cannot open file..[%s]\n",filename);
fclose(fp);
}
return 1;
}

int destroyfp(FILE *fp){
fclose(fp);
return 1;
}

skyoon의 이미지

저도 허접하지만.... getfp에서 왜 fclose(fp)를 해버리는 거죠? 닫아버리고 나면 FILE * fp로 선언한 fp가 가리키는게 뭔가요? ^^a

destroyfp는 뭐하러 만들었나요? -_-;;

뭐든지 3번은 고민해보세요.

서지훈의 이미지

getfp(), destroyfp() 함수에서 fp 인자를 빼보세요.
아마도 잘 될듯...

이 이유는 fp를 global로 선언을 해 두긴 했으나 두 함수의 argument로 들어감으로 인해,
해당 함수를 벗어나면서 할당 받은 fp에 대한 포인트를 잊어 버려서 그럽니다.
getfp() 함수 내부에서 할당 받은 fp의 주소값과 getfp()가 반환된 일후의 주소값을 찍어 보세요.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <beer.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

skyoon의 이미지

흑흑.... 고민해보라고 돌려말했는데 이렇게 답변달아놓으시니 제가 깐죽거린거로 보이는군요 ㅠ_ㅠ

rokmc781의 이미지

-main.c-
FILE	*fp;
 
int main()
{
	fp = getfp(filename);
	fprintf(fp, "test\n");
	destroyfp();
 
	return(0);
}
 
-util.c-
extern FIEL *getfp(char *f_nm);
extern void destroyfp();
 
static FILE *util_fp;
 
FILE *getfp(char *f_nm)
{
	if ( (util_fp = fopen(f_nm, "w")) == NULL ) {
		printf("Cannot open file..[%s]\n", f_nm);
		return(NULL);
	}
 
	return(util_fp);
}
 
void destroyfp()
{
	fclose(util_fp);
}

가장 나이가 많은 사람은 오래 산 사람이 아니라 많은 경험을 한 사람이다.

가장 나이가 많은 사람은 오래 산 사람이 아니라 많은 경험을 한 사람이다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.