본문 바로가기
언어/C언어

[c언어] 문자열을 Int형 정수로 변환하는 atoi함수

by 코딩히어로 2022. 8. 30.
728x90

1


오늘은 리눅스에서 골치 아팠던 문자열 정수 변환 방법에 대해 알아보겠습니다

골치 아팠던 이유 중 하나는 mysql DB의 값을 select count 또는 정수형 데이터를

읽어올 때 결과값을결괏값을 atoi를 통해서 변환을 한 뒤에 사용해야 하는데 해당 결괏값을

그대로 사용하려다 보니 에러가 발생했습니다

 

atoi 의미

atoi 함수는 a, to, i 세 가지로 분리해서 볼 수 있습니다
a = ASCII, i = Int로 해석한다면 atoi의 뜻은 ASCII to Int입니다
즉 char 타입을 int 타입으로 변경한다는 것입니다

 

함수 원형

<stdlib.h>
<cstdlib>

int atoi ( const char* str );
double atof( const char* str );
long int atol( const char* str );

 

예제

<stdlib.h>

void main(){
    char strQuery[512];
    int iStatus=0;
    
    memset(strQuery,0x00,sizeof(strQuery));
    sprintf(strQuery, "select count_data from test_table");
    iStatus = mysql_query(connection, strQuery);
    if(iStatus==0){
    	mysqlResult = mysql_store_result(connection);
        row = mysql_fetch_row(mysqlResult);
        if(atoi(row[0])==0){
        	// 처리코드
        }else{
        	// 처리코드
        }
    }	
}

select 쿼리를 통해 가져온 count_data값은 정수 값으로 쿼리 결과를 가져오는 row에서

atoi를 통해 정수형으로 변경하고 0인지 아닌지를 판별하는 프로그램입니다

mysql_fetch_row가 결괏값으로 문자열을 반환하기 때문에 처음 row [0]의 값은 "0" 또는 "숫자"값이 나오게 됩니다

atoi를 통해 변경한 row[0]의 값은 ""가 제거된 0 또는 숫자의 값을 출력합니다

 

atoi 함수는 매개변수로 들어온 문자열을 앞에서부터 차례로 확인해서

공백 또는 문자가 나올 때까지 숫자로 변환해줍니다

예를 들어 "2022 Test"라는 문자를 atoi를 통해 변환하게 되면 결괏값은 2022가 됩니다

 

문자와 섞일 경우 결과값

char test1[] = "CodingHero";
char test2[] = "1234";
char test3[] = "2022Coding"
char test4[] = "Coding2022"

atoi(test1);
atoi(test2);
atoi(test3);
atoi(test4);

// test1 => 0
// test2 => 1234
// test3 => 2022
// test4 => 0

test4의 경우에는 숫자를 만나기 전에 문자가 먼저 나오기 때문에 바로 0을 반환합니다

728x90
반응형

'언어 > C언어' 카테고리의 다른 글

[C언어] strstr 함수 사용  (2) 2023.10.27
[C언어] memcpy 함수 사용법  (0) 2023.10.27
[c언어] 시간을 구하는 strftime 함수  (4) 2022.08.05
음수 표현 2의 보수  (4) 2022.05.25
json-c 라이브러리 사용 방법  (6) 2022.05.16

댓글