#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이 왜 참조연산자가 *가 하나만 붙는지 컴퓨터 구조 공부한 형님들은 존나 쉽게설명해주더만. *가 하나만 붙으면 무슨 뜻이되는지.
질문자한테 인정받으면 뭐가 달라지나?
간잽이인가?
네 다음 숙제래 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
딱봐도 저학년수업 첫번째 과제
이거 1학년수업이네요 ㅋㅋ 프갤 좆병막둥이인 저도 코드 볼 시간만 있으면 알듯ㅋㅋ 이중포인터에 *하나만 붙이면 되는걸 아는지 테스트할라면 이따구로 소스 다 긁어서 붙여넣지 마세요 ㅋㅋ