#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define  STR_NUM    5
#define  EXT_SIZE   5

 

int ExtendMemForString(char ** pStr, int strLen);
char * ReadString(void);
void SortString(char * strArr[STR_NUM]);

 

int main(void)
{
    char* strArr[STR_NUM];
    int i;
   
    for(i=0; i<STR_NUM; i++)
    {
        printf("문자열 입력 %d: ", i+1);
        strArr[i]=ReadString();
    }
   
    SortString(strArr);
   
    for(i=0; i<STR_NUM; i++)
        puts(strArr[i]);
   
    for(i=0; i<STR_NUM; i++)
        free(strArr[i]);
   
    return 0;
}

 

int ExtendMemForString(char ** pStr, int strLen)
{
    int i;
    char * newStrPtr;
   
    newStrPtr=(char*)malloc(sizeof(char)*(strLen+EXT_SIZE));
    if(newStrPtr==NULL)
        return -1;
   
    for(i=0; i<strLen; i++)
        newStrPtr[i]= (*pStr)[i];
   
    free(*pStr);
    *pStr=newStrPtr;
    return strLen+EXT_SIZE;
}

 

char * ReadString()
{
    int maxStrLen=10;
    char * str=(char*)malloc(sizeof(char)*maxStrLen);
    int idx=0;
   
    while(1)
    {
        if(idx>=maxStrLen)
            maxStrLen=ExtendMemForString(&str, maxStrLen);
       
        str[idx]=getchar();
        if(str[idx]=='\n')
        {
            str[idx]=0;
            break;
        }
        idx++;
    }
   
    return str;
}

 

void SortString(char * strArr[STR_NUM])
{
    int i, j;
    char * tempStr;
   
    for(i=0; i<STR_NUM-1;i++)
    {
        for(j=0; j<(STR_NUM-i)-1; j++)
        {
            if(strlen(strArr[j]) > strlen(strArr[j+1]))
            {
                tempStr=strArr[j];
                strArr[j]=strArr[j+1];
                strArr[j+1]=tempStr;
            }
        }
    }
}

*pstr이 왜 참조연산자가 *가 하나만 붙는지 컴퓨터 구조 공부한 형님들은 존나 쉽게설명해주더만. *가 하나만 붙으면 무슨 뜻이되는지.