|
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
|