C 언어에서 문자열을 정수로 변환하는 atoi 함수 사용법

C 언어에서 문자열을 정수로 변환할 때 사용되는 atoi 함수에 대해 알아봅니다. 이 함수는 문자열을 정수 형태로 바꾸는 간단한 방법을 제공합니다.

목차

atoi 함수란?


atoi는 “ASCII to Integer”의 약자로, 문자열을 정수로 변환하는 함수입니다. 이 함수는 주어진 문자열에서 정수 부분을 추출하여 정수로 반환합니다.

atoi 함수의 기본 사용법


atoi 함수는 <stdlib.h> 헤더 파일에 정의되어 있으며, 문자열을 입력받아 정수 값을 반환합니다. 사용 방법은 매우 간단합니다. 문자열을 함수의 인자로 전달하면, 그 문자열이 정수로 변환되어 반환됩니다. 예를 들어:

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

int main() {
    const char *str = "1234";
    int num = atoi(str);
    printf("변환된 정수: %d\n", num);
    return 0;
}

위 코드는 문자열 “1234”를 정수 1234로 변환하고, 그 값을 출력합니다.

함수 반환 값


atoi 함수는 문자열을 성공적으로 변환할 경우 해당 정수 값을 반환합니다. 만약 문자열에 숫자가 아닌 문자가 포함되어 있거나, 변환이 불가능한 경우에는 0을 반환합니다. 예를 들어:

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

int main() {
    const char *str1 = "1234";  // 숫자만 있는 문자열
    const char *str2 = "abc";   // 숫자가 아닌 문자열
    int num1 = atoi(str1);
    int num2 = atoi(str2);

    printf("변환된 정수: %d\n", num1);  // 출력: 1234
    printf("변환된 정수: %d\n", num2);  // 출력: 0
    return 0;
}

위 코드에서 str1은 정상적으로 1234로 변환되며, str2는 숫자가 없으므로 0을 반환합니다.

문자열의 공백 처리


atoi 함수는 문자열의 시작 부분에 있는 공백을 자동으로 무시합니다. 공백이 있더라도, 그 뒤에 오는 숫자만을 정수로 변환합니다. 예를 들어:

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

int main() {
    const char *str = "   5678";  // 앞에 공백이 있는 문자열
    int num = atoi(str);
    printf("변환된 정수: %d\n", num);  // 출력: 5678
    return 0;
}

위 코드에서 문자열 " 5678"의 공백은 무시되고, atoi 함수는 숫자만 추출하여 5678로 변환합니다.

오류 처리의 한계


atoi 함수는 변환 오류를 명확히 처리하지 않으며, 오류 발생 시 0을 반환합니다. 이로 인해, 숫자가 아닌 문자열이 입력될 경우에도 0을 반환하지만, 변환이 제대로 이루어졌는지 알 수 있는 방법은 없습니다. 예를 들어:

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

int main() {
    const char *str = "123abc";  // 숫자와 문자가 혼합된 문자열
    int num = atoi(str);
    printf("변환된 정수: %d\n", num);  // 출력: 123
    return 0;
}

위 코드에서 "123abc" 문자열은 숫자 부분만 정수로 변환되며, 나머지 문자는 무시됩니다. 그러나 오류가 발생했는지 확인할 수 없으므로, 이런 경우 오류 처리를 더 신중하게 할 필요가 있습니다.

실수로 변환된 값


atoi 함수는 문자열에서 숫자가 아닌 문자가 발견되면, 그 이전까지의 숫자만 변환하고 이후는 무시합니다. 예를 들어:

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

int main() {
    const char *str = "456abc";  // 숫자와 문자가 혼합된 문자열
    int num = atoi(str);
    printf("변환된 정수: %d\n", num);  // 출력: 456
    return 0;
}

위 코드에서 "456abc"는 숫자 456만 변환되어 정수로 반환되고, 나머지 문자는 무시됩니다. 이처럼 atoi는 문자열 내에서 첫 번째 숫자 부분만 변환하고, 그 이후의 문자는 고려하지 않으므로 주의가 필요합니다.

안전한 대체 함수


atoi 함수는 오류 처리와 범위 체크가 부족하여, 더 안전한 대체 함수인 strtol을 사용하는 것이 좋습니다. strtol 함수는 문자열을 정수로 변환하는 과정에서 오류를 검출하고, 변환된 숫자가 범위 내에 있는지 확인할 수 있습니다. 예를 들어:

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

int main() {
    const char *str = "12345abc";  // 숫자와 문자가 혼합된 문자열
    char *end;
    long num = strtol(str, &end, 10);  // 10진수로 변환

    if (*end != '\0') {
        printf("변환할 수 없는 부분: %s\n", end);
    } else {
        printf("변환된 정수: %ld\n", num);
    }
    return 0;
}

위 코드에서 strtol은 문자열에서 숫자를 추출하고, 변환이 끝난 후 남은 부분을 end로 반환합니다. 만약 문자열에 숫자가 아닌 문자가 포함되어 있으면, 해당 부분을 처리할 수 있어 atoi보다 안전합니다.

예시 코드


다음은 atoi를 사용한 간단한 코드 예시입니다. 이 예시는 문자열을 정수로 변환하는 방법을 보여줍니다.

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

int main() {
    const char *str1 = "1234";  // 숫자만 있는 문자열
    const char *str2 = "abc";   // 숫자가 아닌 문자열
    int num1 = atoi(str1);
    int num2 = atoi(str2);

    printf("변환된 정수: %d\n", num1);  // 출력: 1234
    printf("변환된 정수: %d\n", num2);  // 출력: 0
    return 0;
}

이 코드는 문자열 "1234"를 정수로 변환하고 1234를 출력합니다. 반면, "abc"는 숫자가 포함되어 있지 않으므로 0을 반환합니다. 이처럼 atoi는 변환할 수 없는 문자열에 대해 0을 반환하는 특징이 있습니다.

요약


C 언어에서 atoi 함수는 문자열을 정수로 변환하는 간단한 방법을 제공하지만, 오류 처리와 범위 체크가 부족합니다. 변환할 수 없는 문자열이 주어지면 0을 반환하며, 문자열 내 숫자 외의 문자는 무시됩니다. atoi의 한계를 보완하려면 strtol 함수와 같은 대체 방법을 사용하는 것이 좋습니다.

목차