컴퓨터활용/리눅스

U2L프로젝트 ltoa 이슈

멜번초이 2020. 5. 26. 15:23
반응형

IBM이나 HP 유닉스에서 사용했던 ltoa 함수를 리눅스에서는 지원하지 않는다.
int형 변수의 값을 char 배열에 넣는 함수를 사용하고 싶다면 할 수 없이 sprintf() 함수를 사용하는 방법을 사용해야 한다. 하지만 ltoa() 는 바로 문자열 포인터를 return 받기 때문에 바로 사용하면 되었지만 sprintf() 를 사용할 경우 결과를 저장할 변수를 하나 선언해야하는 번거로움이 있다.

sprintf(버퍼,"형식지정자", 값)

예를들어,
long cnt = 400;
char str[100];
sprintf(str, "%ld", cnt );
라고 하면 버퍼에 문자열 400 이 들어간다. 프로그램내에서 빈번하게 사용된다면 매크로로 선언해 놓고 사용하는 것을 권장한다.

#define LTOA( _str, _num) do { \
sprintf( _str, "%ld", _num ); \
} while(0)

<매크로 사용예>

char str[100];
LTOA(str, 3000 );

매크로이다 보니 사용상에 불편함이 있다. Unix 에서 처럼 그냥 ltoa() 로 사용하고 싶다면 함수를 직접 선언해서 사용할 수 있다.

static char * ltoa (long _ltoa_long) {
static char __ltoa_str[64];
memset(__ltoa_str, 0x00, sizeof(__ltoa_str));
sprintf(__ltoa_str, "%ld", __ltoa_long);
return __ltoa_str;
}

함수 이름 앞에 static 을 붙인 것은 파일(.c) 내에서만 사용하겠다는 것이다. 그리고 __ltoa_str 변수 앞에 static 을 선언한 것은 글로벌 변수 처럼 사용하겠다는 거고 ltoa 함수가 끝나고 return 되어도 값이 남아 있도록 하기 위함이다. ltoa가 필요한 프로그램에서만 위와 같이 직접 함수를 선언해서 사용하면 될 것이다. ftoa(), itoa() 함수도 동일한 방법으로 각자 개별 선언해서 사용하면 된다.

반응형

'컴퓨터활용 > 리눅스' 카테고리의 다른 글

리눅스 디렉토리 사용량  (0) 2020.06.16
U2L프로젝트 문자열 이슈  (0) 2020.06.02
U2L프로젝트 printf 이슈  (0) 2020.05.19
U2L 프로젝트 fclose() 이슈  (0) 2020.05.19
티맥스 서버가 수행중 죽을 때  (0) 2019.11.07