반응형
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
반응형
'컴퓨터활용 > 유닉스' 카테고리의 다른 글
대소문자로 변환 쉘 (1) | 2008.07.02 |
---|---|
멀쩡한 쉘이 실행이 안 되고 파일이 없다고 메시지가 나온다면.. (1) | 2008.06.27 |
gcc 이야기 (0) | 2008.05.19 |
truss를 이용한 input/output 내역 모니터링 (0) | 2008.05.13 |
find 명령어 옵션 (2) | 2008.05.12 |