728x90
반응형
C 언어에서 문자열을 숫자로 변환하는 경우가 많습니다. string.h
및 stdlib.h
에서 제공하는 strtol
과 strtod
함수는 이러한 변환을 효과적으로 수행할 수 있도록 도와줍니다.
이 포스팅에서는 strtol
(문자열을 정수로 변환)과 strtod
(문자열을 실수로 변환)의 사용법을 예제와 함께 설명하겠습니다.
1. strtol
함수
strtol
개요
strtol
함수는 문자열을 long
정수로 변환하는 함수입니다. 다양한 진법을 지원하며, 변환이 실패할 경우 오류 처리를 할 수 있도록 endptr
을 제공합니다.
strtol
함수 원형
#include <stdlib.h>
long strtol(const char *nptr, char **endptr, int base);
매개변수 설명
nptr
: 변환할 문자열endptr
: 변환되지 않은 부분을 가리킬 포인터 (NULL 가능)base
: 변환할 진법 (2 ~ 36, 또는 0)base
가 0이면 자동으로 진법을 감지 (0x 또는 0X로 시작하면 16진수, 0으로 시작하면 8진수, 그 외에는 10진수로 인식)
strtol
예제
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "1234abcd";
char *endptr;
long value;
value = strtol(str, &endptr, 10);
printf("변환된 값: %ld\n", value);
printf("변환되지 않은 부분: %s\n", endptr);
return 0;
}
실행 결과
변환된 값: 1234
변환되지 않은 부분: abcd
위 코드에서 strtol
은 "1234"까지만 변환하고 endptr
을 통해 변환되지 않은 "abcd"를 반환합니다.
2. strtod
함수
strtod
개요
strtod
함수는 문자열을 double
형으로 변환하는 함수입니다. strtol
과 유사하게 변환 실패 시 변환되지 않은 부분을 endptr
로 반환할 수 있습니다.
strtod
함수 원형
#include <stdlib.h>
double strtod(const char *nptr, char **endptr);
매개변수 설명
nptr
: 변환할 문자열endptr
: 변환되지 않은 부분을 가리킬 포인터 (NULL 가능)
strtod
예제
#include <stdio.h>
#include <stdlib.h>
int main() {
char str[] = "3.14159abcd";
char *endptr;
double value;
value = strtod(str, &endptr);
printf("변환된 값: %f\n", value);
printf("변환되지 않은 부분: %s\n", endptr);
return 0;
}
실행 결과
변환된 값: 3.141590
변환되지 않은 부분: abcd
이 예제에서는 strtod
가 "3.14159"까지만 변환하고, 나머지 "abcd"는 변환되지 않은 문자열로 남깁니다.
3. strtol
과 strtod
활용 예제
사용자로부터 입력을 받아 숫자로 변환하고 오류 처리를 수행하는 예제를 작성해보겠습니다.
strtol
을 이용한 입력 처리
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main() {
char input[100];
char *endptr;
long value;
printf("정수를 입력하세요: ");
fgets(input, sizeof(input), stdin);
errno = 0; // 에러 상태 초기화
value = strtol(input, &endptr, 10);
if (errno == ERANGE) {
printf("오버플로우 또는 언더플로우 발생!\n");
} else if (endptr == input) {
printf("변환할 수 있는 숫자가 없습니다!\n");
} else {
printf("변환된 값: %ld\n", value);
}
return 0;
}
strtod
를 이용한 입력 처리
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main() {
char input[100];
char *endptr;
double value;
printf("실수를 입력하세요: ");
fgets(input, sizeof(input), stdin);
errno = 0;
value = strtod(input, &endptr);
if (errno == ERANGE) {
printf("오버플로우 또는 언더플로우 발생!\n");
} else if (endptr == input) {
printf("변환할 수 있는 숫자가 없습니다!\n");
} else {
printf("변환된 값: %f\n", value);
}
return 0;
}
4. 정리
strtol
은 문자열을 정수(long
)로 변환하며, 다양한 진법을 지원함.strtod
는 문자열을 실수(double
)로 변환함.- 두 함수 모두 변환 실패 시
endptr
을 통해 오류를 확인할 수 있음. errno
를 활용하여 변환 중 오버플로우/언더플로우를 감지할 수 있음.
위 함수를 적절히 활용하면 문자열을 숫자로 변환할 때 오류를 최소화하면서 효율적인 변환을 수행할 수 있습니다. strtol
과 strtod
를 활용하여 더욱 견고한 C 프로그램을 작성해 보세요!
반응형
'c 언어 > c 표준 라이브러리(Standard C Library)' 카테고리의 다른 글
C 언어 `stdlib.h`의 메모리 조작 함수 완벽 정리 (0) | 2025.02.18 |
---|---|
C `stdlib.h` 개요 및 동적 메모리 할당 (0) | 2025.02.17 |
C 언어 표준 라이브러리 `string.h` - 문자열을 숫자로 변환하는 함수 `atoi`, `atof` (0) | 2025.02.15 |
C 언어 문자열 변환 함수 - strspn, strcspn (0) | 2025.02.14 |
C 표준 라이브러리 `string.h`의 문자열 변환 함수 `strtok`, `strdup` (0) | 2025.02.13 |