컴퓨터활용/유닉스
C 로 구현한 right trim function
멜번초이
2008. 6. 16. 13:24
C의 제공 함수에서는 trim 하는 함수를 제공하지 않는다. 그 이유는 로직이 너무 간단하여 누구나 필요한 사람이 구현해서 사용하면 되기 때문에 굳이 제공하지 않는듯 하다. 그렇다면 strcpy나 strlen도 마찬가지로 간단한데 왜 제공되느냐고 묻는다면 할 말 없다.
이것을 매크로로 만들어 보면
그런데 인터넷에 찾아보니 이것과 똑같은 기능을 하는 함수로 이렇게 어렵게 짜는 방법도 있는 모양인데 뭔말인지 해석이 안 된다.
코딩에서 주로 사용되는 헥사문자셋은
0x00 - null
0x09 - horizontal tab
0x0a - linefeed
0x0b - vertical tab
0x0c - form feed
0x0d - carriage return
0x20 - space
char * rtrim( char *str ) {
long pos = strlen(str)-1;
for (; pos>=0; pos-- ) {
if(str[pos] == 0x20)
str[pos] =
0x00;
else
return str;
}
return str;
}
이것을 매크로로 만들어 보면
#define RTRIM(_str) do { \
long pos = strlen(_str)-1; \
\
for (; pos>=0; pos-- ) { \
if(_str[pos] == 0x20) _str[pos] = 0x00; \
else exit; \
} \
} while(0)
long pos = strlen(_str)-1; \
\
for (; pos>=0; pos-- ) { \
if(_str[pos] == 0x20) _str[pos] = 0x00; \
else exit; \
} \
} while(0)
그런데 인터넷에 찾아보니 이것과 똑같은 기능을 하는 함수로 이렇게 어렵게 짜는 방법도 있는 모양인데 뭔말인지 해석이 안 된다.
/*----------trim (char) c from right-side of string *p------------------*/
char *rtrim( register char *p, register c)
{
register char *end;
register int len;
len = strlen( p);
while ( *p && len)
{
end = p + len-1;
if( c == *end)
*end = 0;
else
break;
len = strlen( p);
}
return( p);
}
char *rtrim( register char *p, register c)
{
register char *end;
register int len;
len = strlen( p);
while ( *p && len)
{
end = p + len-1;
if( c == *end)
*end = 0;
else
break;
len = strlen( p);
}
return( p);
}
코딩에서 주로 사용되는 헥사문자셋은
0x00 - null
0x09 - horizontal tab
0x0a - linefeed
0x0b - vertical tab
0x0c - form feed
0x0d - carriage return
0x20 - space