정처기 준비하는 문돌이 좀 도와주라.. ㅅㅂ 이런걸 니들은 어떻게 만드는거냐?? 대단하다

양질의 조공을 바치고 싶었으나 통매음이다 뭐다 해서 무서워서.. 아무거나 퍼옴

소스코드는 아래와 같고 입력 값은

aaaa

cccc

tttt

bbbb

요렇슴니다. 의문점은 소스코드 옆에 //볼드체 주석으로 적어놓겠음

노트에 펜으로 적으면서 동작을 따라가보는데 내가 이해를 잘못하는건지 좀

지적해주십쇼


#include<stdio.h>

#include<string.h>

#define SIZE 81

#define LIM 20

#define HALT ""

void stsrt(char* string[], int num);

char* s_gets(char* st, int n);


int main(void)

{

char input[LIM][SIZE]; //2차원 배열 input[20][81]

char* ptstr[LIM];

int ct = 0;

int k;


printf("최대 %d라인까지 입력하면 그것들을 정렬하겠습니다. ", LIM);

printf("입력을 멈추려면 라인 시작에서 Enter 키를 누르시오. ");

while (ct < LIM && gets(input[ct]) != NULL //aaaa 입력, 2차원 배열이므로 input[0]에 aaaa 들어감 gets() 리턴값이 NULL은 아니다???

&& input[ct][0] != '') //input[0][0]은 input[0]의 문자열의 첫번째 원소 즉 aaaa 중 a를 의미하는게 맞음?? 결국 while문으로 진입

{

ptstr[ct] = input[ct];//ptstr은 포인터의 배열, input이 2차원 배열이니까 ptstr[0]=input[0]에서 ptstr[0]은 &input[0][0]을 가진다?? 최대의문점1!

ct++;                  즉 포인터 배열 ptstr은 input입력값의 첫번째 원소의 주소만을 가리킨다??? 아무튼 마지막 입력인 으로 input[4]에는 개행

}                            문자가 들어가서 while문에서 빠져나옴(input[0]에서 input[4]까지 반복된 상태)


stsrt(ptstr, ct);//stsrt()의 전달인자로 포인터배열 ptstr와 4가 전달

puts(" 문자열들이 정렬된 결과: ");

for (k = 0; k < ct; k++)

puts(ptstr[k]);


return 0;

}


void stsrt(char* strings[], int num)

{

char* temp;

int top, seek;


for(top=0; top<num-1; top++)

for(seek=top+1;seek<num;seek++)

if (strcmp(strings[top], strings[seek]) > 0)//strings[0]과 strings[1]을 비교, 근데 이걸로 각 배열 원소의 첫번째 글자에 접근을 어떻게 하는거지???

{                                                     매개변수 모양이 *strings[]인데 그럼 strings[0]과 strings[1]에도 참조연산자 *를 붙어야하는거??

temp = strings[top];                    요게 최대 의문점2

strings[top] = strings[seek];

strings[seek] = temp;

}

}

char* s_gets(char* st, int n)

{

char* ret_val;

int i = 0;


ret_val = fgets(st, n, stdin);

if (ret_val)

{

while (st[i] != ' ' && st[i] != '')

i++;

if (st[i] == ' ')

st[i] = '';

else

while (getchar() != ' ')

continue;

}

return ret_val;

}