티스토리 뷰
atoi(), itoa() 함수에 대하여..
블로그 유입로그를 보다보니 위의 함수에 관련된 유입이 많아서 위 함수에 관련된 포스팅을 합니다. 이 함수들은 stdlib.h
파일에 선언되어 있습니다.
다만, itoa 함수의 경우 비 표준함수입니다. C99/C11규격에서 정의되지 않고, MS 컴파일러에서만 이용가능한 함수입니다. 즉, Linux/macOS 등 비 마이크로소프트 운영체제(컴파일러)에서는 stdlib.h
헤더파일을 include 한다고 해도 itoa 함수를 사용하지 못합니다. 따라서 저는 itoa함수 대신에 다른 방법으로 문자열 전환을 권유해 드렸습니다.
c/c++ sprintf, snprintf 함수 - 해당 포스팅을 보고 싶으시면 이곳을 클릭하세요
1. 문자열을 정수형으로 변환
이때 사용하는 함수가 atoi함수 입니다.
int atoi (const char* str);
- 필요 헤더 : stdlib.h
- 파라미터 : 문자열.
- 반환값 : 숫자로 변환된 값 (ex. "5000" 이라는 문자열을 파라미터로 넣으면 5000이라는 정수가 리턴됨.)
- 기타 : C 표준 함수 (C99/C11)
프로토 타입은 위와 같습니다. atoi와 친구같은 아이들도 몇명 있습니다.
double atof (const char* str);
long atol (const char* str);
long long atoll (const char* str);
각 함수의 반환형을 보시면 문자열을 어떤 타입으로 바꿔주는지 알 수 있습니다.
atof는 문자열을 배정도형으로 바꿔주는 함수이며,
atol은 문자열을 long 형으로 바꿔주고,
atoll은 문자열을 long long 형으로 바꿔줍니다.
위키 문서를 잠시 뒤적거린 결과, 위의 함수 모두 C 표준함수 입니다. atoll 의 경우 C99 아래 표준함수 이지만,, atoll정도는 웬만한 컴파일러에서는 다 허용 되지 않을까 생각합니다. (C99의 경우 C++ 개발이후 나온 표준이라는 것 때문에 C99 라이브러리일 경우 C++ 컴파일러에서 사용하지 못하는 경우가 '간혹' 있다고 합니다.)
2. 정수형를 문자열로 변환
자 이제 이것이 문제가 되는 함수인데요.
char * itoa(int val, char * buf, int radix);
필요 헤더 : stdlib,h
파라미터 :
- 변환할 정수
- 변환받을 문자열을 저장할 문자열 변수
- 변환할 진수 (10을 입력하면 10진수, 2를 입력하면 2진수)
반환값 : 변환된 문자열의 주소 (2번째 파라미터인 buf의 주소)
기타 : 비표준함수 (마이크로소프트 VS에서만 이용 가능)
itoa는 마이크로소프트 비주얼스튜디오에서만 정의해놓은 함수입니다. 따라서 우분투 등 다른 플랫폼에서 개발하시는 분은 사용하실 수가 없었을 겁니다.
그래서 전 itoa 함수 대신에 sprintf를 사용하는 것을 권장드립니다! (글 서두에 연결된 링크를 참조하시길 바랍니다.)
비주얼 스튜디오에서 위 함수의 친구도 있기는 합니다.
char * ltoa (long val, char * buf, int radix);
보시면 아시겠지만 long 형을 문자열로 바꿔주는 함수입니다.
아쉽게도 ftoa 같은 함수는 존재하지 않습니다.
(사실 fcvt라는 함수가 존재 하기는 합니다. 또한 이 함수는 표준인것처럼 보입니다.-자세히 알아보지 않아서 확실하지는 않지만 우분투에서도 사용가능한 함수- 하지만 사용법도 복잡하고, 이런 남들도 잘 쓰지 않는 복잡한 함수를 사용하느니, sprintf가 훨씬 간단하고 단순하기에 추천을 드리는 바입니다. 이 함수의 설명에 대해서는 생략하도록 하겠습니다.)
예제코드 하나 띄워드리고 마무리짓도록 하겠습니다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int a = 5;
double b = 5.5;
char str[10] = "1000";
char tmp[10] = {0,};
printf("a+str = %d\n", a + atoi(str)); // 문자열 -> 정수형 변환
printf("b+str = %.2lf\n", b + atof(str)); // 문자열 -> 실수형 변환
strcat(str, itoa(a,tmp,10)); // 정수형 -> 문자열 변환
printf("%s\n", str);
return 0;
}
출력결과
'C, C++ > C, C++' 카테고리의 다른 글
[goto문 에러] jump to label '%LABEL%' [-fpermissive] (0) | 2015.06.23 |
---|---|
c언어 매크로 사용법 - 2. 가변인자 매크로 (0) | 2014.03.02 |
c언어 매크로 사용법 - #, ## 연산자 (2) | 2014.03.02 |
C언어 bsearch() - 이진탐색 함수 (0) | 2014.02.16 |
C언어 가변인자(가변파라미터)를 사용해보자 (7) | 2014.01.25 |
- Total
- Today
- Yesterday
- ECMA2015
- itoa
- lua table
- observable
- zone
- terminal 색
- JavaScript
- 스위프트
- Zone.js
- 폰트 조정
- vim
- C언어
- git 설정
- 안시 컬러
- angular2
- Angular
- 타입스크립트
- 챗봇
- Swift
- typeScript
- 리눅스 터미널 색상
- NgZone
- qemu linux arm
- 우분투 16.04
- ansi color
- 안시 색상
- QT
- git proxy
- ZONES
- Rx.js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |