본문 바로가기
개발 이야기/리눅스 이야기

[C] char array to int, char array to double

by 런던살자 2019. 6. 24.

안녕하세요 마블입니다. 

 

프로그래밍을 하면서 형변환 해줘야할때가 굉장히 많죠

 

C#이나 자바같은경우에는 형변환 기능이 클래스로 제공되어서 간편하게 할수있습니다.

 

C언어는 이러한 클래스가 없어서 직접 헤더파일을 Include 하고 함수를 직접 찾아봐야 하기때문에 이번 포스팅의 주제로 삼았습니다.

 

 

아래 코드는 예제 코드입니다. 

 

구분하기 쉽게 원본, 형변환 순으로 단락을 나눠놨는데요

 

문자열을 정수형으로 바꾸는 것은 atoi() 함수를, 문자열을 실수형으로 바꾸는 것은 atof()함수를 이용하시면 됩니다.

 

헤더파일은 stdlib.h 입니다.

 

그리고 반대의 경우도 itoa()와 ftoa() 함수로 구현을 하였습니다. 

 

그런데 컴파일을 해보니 에러가 발생합니다....

 

해당 함수들이 존재하지 않는다고 에러를 알려주는군요..

그 이유는 리눅스에서는 itoa()와 ftoa() 함수가 존재하지 않고 Microsoft C 에서만 사용을 할수 있다고 합니다.

 

#include <stdlib.h>를 추가해도 정의가 되어 있지 않다고 합니다.

 

그래서 반대로 형변환을 하기 위해서는 sprintf() 함수를 이용해아 합니다.

 

그럼 코드를 약간 수정하여 다시 컴파일을 해보겠습니다.

 

컴파일에 성공하고 결과도 정상적으로 출력되었습니다.

 

이번에 포스팅을 하면서 itoa()와 ftoa() 가 윈도우에서만 사용할 수 있다는것을 처음알았습니다.

 

윈도우에서는 C를 많이 해보지 않아서 사용하는일이 많지 않아서 무지했던거 같군요..

 

이 함수들을 이용하면 좀더 코드가 간략해 질거 같았지만 아쉽습니다.

 

 

최종적으로 수정한 코드를 업로드 하였습니다.

#include <stdio.h>
#include <stdlib.h>

void main()
{
	char StringToInt[10] ="9990";
	int nTemp=atoi(StringToInt);
	

	char StringToDOuble[10] ="60.88";
	double douTemp=atoi(StringToDOuble);

	/*
	int IntToString=8000;	
	char IntTemp[10];
	itoa(IntToString, IntTemp, 10);


	double DoubleToString=4.5;	
	char DoubleTemp[10];
	ftoa(DoubleToString, DoubleTemp, 10);
*/

	int sprintf_Value=1900;	
	char sprintf_int[10];
	sprintf(sprintf_int, "%d",sprintf_Value);

	double sprintf_test=12.54;	
	char sprintf_double[10];
	sprintf(sprintf_double, "%f",sprintf_test);

	printf( "StringToInt : %d\n", nTemp);
	printf( "StringToDOuble : %f\n", douTemp);

	printf( "Int sprintf : %s\n", sprintf_int);
	printf( "Double sprintf : %s\n", sprintf_double);

	return;
}

 

이상 마블랑이었습니다.

 

읽어주셔서 고맙습니다.

 

 

댓글