C 언어 strtod()함수 사례 상세 설명
인터넷 에는 strtod()함수 에 관 한 글 이 많 지만 대부분 strtod()함수 로 문 자 를 변환 합 니 다.
char *str = "111.11";
char *target;
double ret;
ret = strtod(str, &target);
문자열 을 바 꾸 는 이런 용법 은 드물다
char *p = "111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6 1.18973e+4932zzz";
본 고 는 주로 strtod()함 수 를 참고 하여 그 중의 코드 예 시 를 설명 할 뿐 입 니 다.물론 저 는 예시 코드 를 이해 할 때 약간의 문제 가 생 겼 습 니 다.StackOverflow 에서 다음 과 같은 질문 을 했 습 니 다.그 결과 Barmar 대신 이 코드 를 직접 해석 하여 이 신,StackOverflow 판 링크 에 감 복 했 습 니 다.코드 분석
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
int main(void)
{
// parsing with error handling
const char *p = "111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6 1.18973e+4932zzz";
printf("Parsing '%s':
", p);
char *end;
for (double f = strtod(p, &end); p != end; f = strtod(p, &end))
{
printf("'%.*s' -> ", (int)(end-p), p);
p = end;
if (errno == ERANGE){
printf("range error, got ");
errno = 0;
}
printf("%f
", f);
}
// parsing without error handling
printf("\" -0.0000000123junk\" --> %g
", strtod(" -0.0000000123junk", NULL));
printf("\"junk\" --> %g
", strtod("junk", NULL));
}
질문 1:
p = end // ?
strtod()함수 의 인자:
double strtod( const char *str, char **str_end );
str s t r 가 가리 키 는 문자열 의 지침end_str e n d _ 포인터
strtod()함수 가 호출 되 지 않 기 전에 문자열 포인터 p 와 end 주 소 를 인쇄 합 니 다.
printf("%p
", p);
printf("%p
", end);
실행 결과0000000000408000 000000000000002D
다음 순환 을 실행 할 때 p 와 end 주 소 를 인쇄 합 니 다.
for (f = strtod(p, &end); p != end; f = strtod(p, &end))
{
printf("p addr = %p
", p);
printf("end addr = %p
", end);
printf("'%.*s' -> ", (int)(end-p), p);
p = end;
if (errno == ERANGE){
printf("range error, got ");
errno = 0;
}
//printf("%f
", f);
}
출력p addr = 0000000000408000
end addr = 0000000000408006
'111.11' -> 111.110000
p addr = 0000000000408006
end addr = 000000000040800C
' -2.22' -> -2.220000
p addr = 000000000040800C
end addr = 0000000000408010
' Nan' -> 1.#QNAN0
p addr = 0000000000408010
end addr = 0000000000408017
' nan(2)' -> 1.#SNAN0
p addr = 0000000000408017
end addr = 000000000040801B
' inF' -> 1.#INF00
p addr = 000000000040801B
end addr = 0000000000408030
' 0X1.BC70A3D70A3D7P+6' -> 111.110000
p addr = 0000000000408030
end 포인터 가 현재 문자열 의 다음 문 자 를 가리 키 는 것 을 발견 할 수 있 습 니 다.p 포인 터 는 현재 문자열 의 한 문 자 를 가리 키 고 있 습 니 다.
따라서 p=end 라 는 문 구 는 문자열 의 모든 문 자 를 strtod()로 조작 하고 for(f=strtod(p,&end)로 사용 합 니 다.p != end; f=strtod(p,&end)문장의 p=end 는 strtod()작업 을 해 야 할 문자 가 없 으 면 순환 을 종료 할 수 있 습 니 다.
질문 2:
printf("'%.*s' -> ", (int)(end-p), p);
인쇄 된 문 자 는 왜 일련의 문자 입 니까?예 를 들 어:'111.11' ' -2.22' ' Nan' ' nan(2)' ' inF' ' 0X1.BC70A3D70A3D7P+6' ' 1.18973e+4932'
(int)(end-p)길 이 를 계산 합 니 다.%.*s 의*길 이 는 현재 문자열 에서 몇 개의 문 자 를 선택 하여 인쇄 하 는 것 입 니까?
예제 코드:
#include<stdio.h>
int main ()
{
char *p = "Hello World!";
printf("length = 2 str = %.2s
", p);
printf("length = 3 str = %.3s
", p);
}
출력length = 2 str = He
length = 3 str = Hel
여기 서 C 언어 strtod()함수 사례 에 대한 상세 한 설명 은 여기까지 입 니 다.더 많은 C 언어 strtod()함수 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C 언어 체인 시계는 뱀을 탐식하는 작은 게임을 실현한다본고의 실례는 여러분에게 C 언어 체인표가 뱀 탐식 게임을 실현하는 구체적인 코드를 공유하여 참고하도록 하였으며, 구체적인 내용은 다음과 같다. 프로젝트 이름: 뱀놀이 운영 환경: Linux 프로그래밍 언어: C 언...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.