본문 바로가기

C언어/C_지식_정리

[C 언어] 문자열의 숫자를 정수형으로 변환해주는 atoi 함수

제목 그대로 문자열로 되어있는 숫자를 정수형으로 변환해주는 역할은 atoi함수,

필자도 처음에 형변환을 하면 된다는 생각에 atoi 함수의 필요성을 못느꼈지만

그 필요성을 느끼지 못한건 아마 자료형의 이해도가 조금 부족했던거 같기 때문이다.

먼저 사용법 부터 익히고 사용법 밑에는 필자의 atoi함수 필요성을 못느낀 삽질이 담겨있다.


먼저 사용법은 <stdlib.h> 헤더파일을 코드에 포함해야한다.

atoi ex)

#include <stdio.h>
#include <stdlib.h>
int main()
{
	char num[4] = "100";
	char num2[4] = "120";

	printf("%d", atoi(num) + atoi(num2));

	return 0;
}

(실행결과)

숫자가 저장된 문자열 변수를 atoi(문자열 변수) 로 하면

문자열이 숫자로 변환되어서 사칙연산이 가능해진다.

 

별로 설명할 것이 없는 함수이지만 밑에서 부터는 필자의 삽질이 담겨있다.

atoi함수의 필요성을 못느끼면 밑의 삽질을 보는것을 추천한다.


char ex)

#include <stdio.h>
int main()
{
	char num = 100;
	char num2 = 120;

	printf("%d", num + num2);

	return 0;
}

(실행결과)

위의 예제는 정상적으로 작동한다.

엄밀히 말하면 char형도 숫자 계산은 된다.

하지만 char형의 표현 가능 범위를 보면 -128 ~ +127 사이이다.

정수형, 즉 숫자의 표현 범위는 아주 제한적이여서 큰 숫자를 계산하기에

적합하지 않는 자료형이라는 것이다.

char ex2)

#include <stdio.h>
int main()
{
	char num = '100';
	char num2 = '120';

	printf("%d", num + num2);

	return 0;
}

(실행결과)

첫번째 예제와 다른 점은 숫자를 문자로 바꿨다는 점이다.

하지만 결과 값은 원하지 않는 값이 나온다.

char ex3)

#include <stdio.h>
int main()
{
	char num = "100";
	char num2 = "120";

	printf("%d", num + num2);

	return 0;
}

 

(실행결과)

이번엔 작은 따옴표를 큰 따옴표로 바꾸었다.

두번째 예제와 다른 결과값이 나왔다.

결론적으로 원하는 결과는 아니다.

 

두번째 예제와 세번째 예제는 당연히 안되는걸 알고있다.

따지고 보면 숫자 하나에 1바이트인데

'100' 이나 "100"은 3바이트가 되버린다.

그리고 결과값이 나오긴 하는데 왜 나오는지는 솔직히 모르겠다.

char ex4)

#include <stdio.h>
int main()
{
	char num[4] = "100";
	char num2[4] = "120";

	printf("%d", (int)num + (int)num2);

	return 0;
}

(실행결과)

원래 생각으로는 위의 예제처럼 하면 되겠다..

라고 생각했지만 결과값이 오류가 난다.

그리고 저 결과값은 계속 바뀐걸로 봐서 주소값 처럼 보인다.

이정도 삽질을 하고 나서 안되는구나 생각하고 atoi 함수의 필요성을 느꼈다.

 

 

'C언어 > C_지식_정리' 카테고리의 다른 글

[C 언어] 논리 연산자  (0) 2019.12.02
[C 언어] 관계 연산자  (0) 2019.12.02
[C 언어]변수와 사칙연산  (0) 2019.11.30
[C 언어] 자료형  (0) 2019.11.29