728x90
반응형
C 언어에서 문자열을 숫자로 변환할 때 string.h
의 atoi
와 atof
함수를 사용할 수 있습니다.
이번 포스팅에서는 두 함수의 사용법과 주의할 점, 그리고 예제를 살펴보겠습니다.
1. atoi
함수 (문자열을 정수로 변환)
atoi
함수는 string.h
에 정의된 함수로, 문자열을 int
타입의 정수로 변환하는 역할을 합니다.
atoi
함수 원형
#include <stdlib.h>
int atoi(const char *str);
atoi
함수 동작 원리
- 입력 문자열의 앞부분에서 숫자로 변환 가능한 부분을
int
로 변환하여 반환합니다. - 변환할 수 없는 문자가 나오면 그 이전까지의 숫자만 변환합니다.
- 변환할 숫자가 없으면 0을 반환합니다.
- 숫자가 아닌 공백이나
+
,-
기호는 허용되며,-
기호가 있을 경우 음수로 변환합니다. atoi
는 변환 실패를 감지할 방법이 없으므로, 변환 오류를 확인하려면strtol
을 사용하는 것이 좋습니다.
atoi
사용 예제
#include <stdio.h>
#include <stdlib.h>
int main() {
char str1[] = "1234";
char str2[] = " -567";
char str3[] = "42abc";
char str4[] = "hello123";
int num1 = atoi(str1);
int num2 = atoi(str2);
int num3 = atoi(str3);
int num4 = atoi(str4);
printf("atoi(\"%s\") = %d\n", str1, num1);
printf("atoi(\"%s\") = %d\n", str2, num2);
printf("atoi(\"%s\") = %d\n", str3, num3);
printf("atoi(\"%s\") = %d\n", str4, num4);
return 0;
}
실행 결과
atoi("1234") = 1234
atoi(" -567") = -567
atoi("42abc") = 42
atoi("hello123") = 0
atoi
사용 시 주의할 점
- 변환할 문자열에 숫자가 없으면 0을 반환합니다.
atoi("2147483648")
과 같이int
범위를 초과하는 값을 변환하면 오버플로우가 발생할 수 있습니다.- 변환 실패를 감지할 방법이 없으므로, 보다 안전한
strtol
을 사용하는 것이 좋습니다.
2. atof
함수 (문자열을 실수로 변환)
atof
함수는 string.h
가 아닌 stdlib.h
에 정의되어 있으며, 문자열을 double
타입의 실수로 변환합니다.
atof
함수 원형
#include <stdlib.h>
double atof(const char *str);
atof
함수 동작 원리
atoi
와 유사하게, 변환할 수 있는 숫자 부분을double
로 변환하여 반환합니다.- 부동소수점 형식(
.
소수점 포함)과 지수 표현 (e
또는E
)도 인식합니다. - 변환할 숫자가 없으면 0.0을 반환합니다.
- 변환 오류를 감지할 방법이 없으므로,
strtod
함수를 사용하는 것이 더 안전합니다.
atof
사용 예제
#include <stdio.h>
#include <stdlib.h>
int main() {
char str1[] = "3.14";
char str2[] = " -0.00123";
char str3[] = "2.71e3";
char str4[] = "hello1.23";
double num1 = atof(str1);
double num2 = atof(str2);
double num3 = atof(str3);
double num4 = atof(str4);
printf("atof(\"%s\") = %f\n", str1, num1);
printf("atof(\"%s\") = %f\n", str2, num2);
printf("atof(\"%s\") = %f\n", str3, num3);
printf("atof(\"%s\") = %f\n", str4, num4);
return 0;
}
실행 결과
atof("3.14") = 3.140000
atof(" -0.00123") = -0.001230
atof("2.71e3") = 2710.000000
atof("hello1.23") = 0.000000
atof
사용 시 주의할 점
atoi
와 마찬가지로 변환 실패를 감지할 방법이 없으며,strtod
를 사용하는 것이 더 안전합니다.2.71e3
과 같은 지수 표현을 올바르게 해석합니다.
3. atoi
와 atof
의 한계와 대안
atoi
및 atof
의 문제점
- 변환 오류를 감지할 방법이 없어 예외 처리가 어렵습니다.
atoi
는 정수 범위를 초과하는 경우 오버플로우가 발생할 수 있습니다.atof
는 정확한 오류 검출이 어렵습니다.
더 안전한 대안: strtol
및 strtod
atoi
와 atof
대신 strtol
(정수 변환)과 strtod
(실수 변환)를 사용하면 변환 실패를 감지하고 더 정밀한 예외 처리가 가능합니다.
strtol
사용 예제
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main() {
char str[] = "123abc";
char *endptr;
errno = 0;
long num = strtol(str, &endptr, 10);
if (errno != 0) {
perror("strtol");
} else if (endptr == str) {
printf("변환할 숫자가 없습니다.\n");
} else {
printf("변환된 값: %ld\n", num);
}
return 0;
}
4. 결론
atoi
와atof
는 간단한 문자열 변환에 유용하지만, 오류 감지가 어려운 단점이 있습니다.- 보다 안전한 변환을 위해
strtol
과strtod
를 사용하는 것이 좋습니다. - 문자열을 숫자로 변환할 때 입력값이 유효한지 항상 확인하는 습관을 들이는 것이 중요합니다.
이상으로 atoi
와 atof
함수의 설명과 예제를 마칩니다. 감사합니다!
반응형
'c 언어 > c 표준 라이브러리(Standard C Library)' 카테고리의 다른 글
C 언어 `string.h`의 문자열 숫자 변환 함수: `strtol`과 `strtod` (0) | 2025.02.16 |
---|---|
C 언어 문자열 변환 함수 - strspn, strcspn (0) | 2025.02.14 |
C 표준 라이브러리 `string.h`의 문자열 변환 함수 `strtok`, `strdup` (0) | 2025.02.13 |
C 언어 `string.h`의 문자열 검색 함수 - `strchr`와 `strstr` (0) | 2025.02.12 |
C 언어 문자열 비교 API - strcmp와 strncmp (0) | 2025.02.11 |