파일 입출력 관련 질문입니다^^

khjkag@kldp.org의 이미지

질문 하나 드릴게요^^
아래가 첫번째 함수

#include

int main()
{
FILE *fp;
strz[]={"fprintf()는", "훌륭한","문자열","출력 함수다."};
int x=100;

if((fp=fopen("abc.txt","w"))==NULL)
{
printf("<파일을 열 수 없습니다.>");
return 1;
}
{

fprintf(fp, "%s %d%% %s %s %s", strz[0], x, strz[1], strz[2], strz[3]);

fclose(fp);

}

위의 첫번째 함수를 실행한 다음에
두번째 프로그램을 실행하면,

#include

int main()
{

FILE *fp;
char buf1[256], buf2[256];

if((fp=fopen("abc.txt", "r"))==NULL)
{
printf("파일을 열 수 없습니다.");
return 1;
}

{

printf("파일을 열었습니다.\n");

fscanf(fp, "%s %s", buf1,buf2);
printf("%s %s", buf1, buf2);

fclose(fp);

printf("\n파일을 닫았습니다.");
}

return 0;
}

실행 결과는

파일을 열었습니다.
fprintf()는 100%
파일을 닫았습니다.

이렇게 나오는데,
이해가 안 가는 것은 buf1[256]과 buf2[256]입니다.
이 두 배열에 할당된 값이 없는데 어떻게 첫번쨰 함수의 char 타입 배열에 있는 내용이 출력되는 건가요??
fscanf는 아직도 잘 모르겠네요..
그리고 두번째 함수에서 if 밑에 return 1의 의미는 어떤 것입니까??

고수님들 답변 부탁드립니다^^;;


klara의 이미지

scanf는 아실 것이라고 생각합니다.
scanf는 표준입력스트림(간단하게 말하자면 키보드입력)으로부터 값을 입력 받아서 변수에 값을 대입하지요?
예를 들어, scanf("%s %s", buf1,buf2); 와 같이 하면, 두개의 문자열을 입력받아서 각각 buf1과 buf2에 대입하게 될 것입니다.
fscanf는 한가지를 제외하고는 scanf와 동일한 역할을 합니다. 다른점은 입력 받는 곳이 키보드로부터의 입력이냐, 파일로부터의 입력이냐라는 점입니다.
'파일로부터의 입력'이라는게 이해가 안되시면, 입력이란 말 대신에 읽어온다고 생각해보세요.
scanf는 키보드로 입력된 값을 읽어오는 것이고, fscanf는 파일로부터 값을 읽어오는 것입니다.
그러므로 fscanf를 실행한후에는, buf1과 buf2에는 값이 들어있게 되지요.
참고로 "두 배열에 할당된 값"이라고 하셨는데, 보통 할당이라고하면 동적할당처럼 메모리를 할당하는 것을 가리킵니다. 이경우는 할당된 값이 아니라 대입된 값이라고 하는게 좋습니다.

마지막으로 return 1이 무슨뜻이냐고 물으셨는데, 그러면 return 0의 의미는 알고 계신지요?
알고 계신다면 '일반적으로 0이 아닌 값은 무언가 문제가 발생했다는 뜻으로 사용된다'정도로 답변할수 있지만, return 0의 의미조차 모르신다면 함수에 대해 공부해보시길 추천합니다.
그렇지 않더라도, 파일입출력할정도면 보통 함수에 대해서는 이미 했을 텐데, 각각의 프로그램을 첫번째 함수, 두번째 함수라고 칭하신걸로 봐선, 함수가 무엇인지 다시 한번 공부해보시는게 좋을 것 같습니다.

khjkag@kldp.org의 이미지

답변 감사합니다~

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.