Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++ strtod() 함수 완벽 정리: 문자열을 실수(double)로 변환하기

C/C++의 strtod() 함수란?

strtod() 함수는 문자열을 부동 소수점 숫자로 변환하는 데 사용되는 C 표준 라이브러리 함수입니다. 입력받은 문자열을 double 타입의 실수로 변환하며, 변환이 성공하면 변환된 값을 반환하고 실패하면 0을 반환합니다. 이 함수를 사용하려면 stdlib.h 헤더 파일을 포함해야 합니다.

함수 구문

다음은 C 언어에서 strtod() 함수의 기본 구문입니다.

double strtod(const char *string, char **endpointer);

각 매개변수의 의미는 다음과 같습니다.

string − 부동 소수점 숫자로 변환할 대상 문자열입니다.

endpointer − 이미 할당된 객체를 가리키는 포인터로, 함수 실행 후 숫자 값 바로 다음에 위치한 첫 번째 문자의 주소가 저장됩니다.

예제 코드

#include <stdio.h>
#include <stdlib.h>
int main () {
    char s[20] = "8.28 is a number";
    char *p;
    double result;
    result = strtod(s, &p);
    printf("The number after conversion of string : %lf", result);
    return(0);
}

실행 결과

The number after conversion of string : 8.280000

코드 설명

위 프로그램에서는 char 타입 배열 s[20]을 선언하고 숫자와 문자가 섞인 문자열로 초기화한 후, strtod() 함수를 호출하여 이 문자열을 double 타입의 실수로 변환합니다.

char s[20] = "8.28 is a number";
char *p;
double result;
result = strtod(s, &p);

strtod() 함수는 문자열 앞부분에서 유효한 숫자 부분("8.28")만 읽어 실수 값으로 변환하고, 숫자 해석이 끝난 지점 즉 " is a number"가 시작되는 위치의 주소를 포인터 p에 저장합니다. 이처럼 endpointer 매개변수를 활용하면 문자열 중 어디까지가 숫자로 인식되었는지 쉽게 확인할 수 있어, 입력 문자열 검증 작업에도 유용하게 사용됩니다.

참고 사항

문자열이 숫자로 시작하지 않으면 변환에 실패하여 0이 반환됩니다. 따라서 반환값이 실제 0인지 변환 실패 때문인지 구별하려면 errno 변수를 함께 확인하는 것이 좋습니다. 또한 값이 너무 커서 범위를 초과하면(오버플로우) ±HUGE_VAL을 반환하고, 너무 작으면(언더플로우) 0을 반환합니다.