|
문제있는 코드입니다.
1. 첫째
char TempString[1024] 는 지역변수로써 strlwr 함수를 빠져나가면 자동으로 사라지게 되겠죠
다음과 같이 코딩하고
lpRetString = TempString;
return lpRetString;
위에서 lpRetString은 TempString입니다.
strlwr 함수 밖에서 retrun받은 값을 사용하지 않는다면 모를까 사용하게 된다면..
문제가 심각하지요
2. 둘째
TempString을 1024 크기로 잡았습니다.
pString으로 넘어오는 문자열의 크기가 1024보다 작아야 겠죠
만약 1024보다 크면 Buffer overflow 에러가 나겠죠?
3. 셋째
문제는 아니지만.. 쓸데없는 코드가 많네요
3.1) TempString을 바로 return하면 될텐데.. 왜 lpRetString에 담아서 return하는지...
(TempString을 return하는것 자체가 근본적으로 문제이긴 합니다만..)
3.2) strcpy에서 문자열을 한번 copy하면서 전체 scan하구
strlen에서 길이계산하면서 전체scan 하구
for문 돌면서 또한번 전체 scan하구..
반복 코딩이 많네요
루프한번 돌면서 처리할수도 있을텐데...
그럼..
용맨소녀 님이 쓰신 글 :
: char *strlwr(char *pString)
: {
: char TempString[1024], *lpRetString;
: int Length = strlen(pString);
:
: strcpy(TempString, pString);
:
: for(int i = 0; i < Length; i++)
: {
: if((BYTE)TempString[i] >= 0x80)
: i++;
: else
: {
: if(TempString[i] >= 65 && TempString[i] <= 90)
: TempString[i] += 32;
: }
: }
:
: lpRetString = TempString;
:
: return lpRetString;
: }
:
: char VoiceName[128];
: sprintf(VoiceName, "%s.mp3", strlwr(UnitName[Thema][lpSelectUnit->Index]));
:
: "banana.mp3"라고 한다면... 잘된 코드였는데.. 요즘, 버전업 작업중인데 지금은 "bana.mp3만 찍힙니다."
:
: 문자열이 4자로 줄어들어요..
:
: 그래서 이렇게 고치니까 잘됩니다.
:
: strcpy(VoiceName, strlwr(UnitName[Thema][lpSelectUnit->Index]));
: strcat(VoiceName, ".mp3");
:
: 좀 미심쩍은 부분이 있긴한데, 정확히 왜 그럴까요.. (XCode에는 strlwr이라는 함수가 없더군요.. 못찾아서 그런가..;;)
|