프로그래밍

 3198, 1/160 회원가입  로그인  
   agmlwn
   [C언어] 2차원 배열과 문자열의 저장관계와 printf의 출력방식

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=3295 [복사]


/* 문자열을 2차원배열에 저장하는 코드입니다. */
#include<stdio.h>
#include<string.h>

#define MAX_LEN 20
#define STR_ARR 5

int main(void)
{
char str[STR_ARR][MAX_LEN]; //문자열을 저장할 2차원배열 선언
int state[STR_ARR];// 문자열 길이를 저장할 변수 선언
int i,j;// for문을 위해 선언

puts("프로그램시작!");

while(1)
{
  for(i=0 ; i<STR_ARR ; i++) // 문자열 입력을 위해
  {
   fputs("문자열을 입력하시오 :",stdout);
   scanf("%s",str[i]); // 문자열 저장
   state[i] = strlen(str[i]);//문자열 길이를 구하기!
  }
  if(i == STR_ARR)
   break;
}

for(i=0 ; i<STR_ARR ; i++)
  {
   fputs("입력하신 문자열 :",stdout);
   printf("%s\n", str[i]); // 문자열 출력
  }

return 0;
}

문제를 다 풀지 않고 이해를 위해 코드를 만들었습니다. 이해를 위해 하나하나 해석을 하는데 이해되지 않는 부분이 있어서 질문드립니다.

일단 제가 해석한 부분까지 적어보면

키보드로 문자열을 입력해서 엔터를 치면 입력버퍼에 올라가고 scanf함수에 의해 문자열이 읽혀지고 ~, 그때 할당된 메모리에 문자열이

입력되고 ,str[i]에 입력한 문자열의 첫번째 주소가 들어간다. 까지 해석했습니다.

제가 이해가 되지 않는 부분은

1. str[i]에 문자열이 입력되는 형태가 궁금합니다.(일차원배열로 바꾸어봤더니 저장할 곳이 할당되지 않아 오류를 일으킨다더군요)

    str[i]의 주소에 어떻게 2차원배열의 모습으로 저장되는지가 궁금합니다.(좀 자세히 부탁드립니다.)

2. printf에서 매개변수에 str[i]로 선언해서 출력을 하는데 어떻게 주소값으로 2차원배열의 첫번째 주소만으로 읽혀지는지가 궁금합니다.

3.그외 하나는 배열에 입력된 문자열은 변수인데 그럼 입력전까지 입력버퍼에 있는순간까지는 상수로 있는것인지 궁금합니다.

  Hit : 14069     Date : 2012/01/29 05:08