>

strtod () 예제 를 읽을 때 의심. 코드는 다음과 같습니다.

const char *p = "111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6  1.18973e+4932zzz";
printf("Parsing '%s':\n", p);
char *end;
double f; 
for (f = strtod(p, &end); p != end; f = strtod(p, &end))
{
    printf("'%.*s' -> ", (int)(end-p), p);//I can't understand this line
    p = end;
    if (errno == ERANGE){
        printf("range error, got ");
        errno = 0;
    }
    printf("%f\n", f);
}

출력 :

Parsing '111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6  1.18973e+4932zzz':
'111.11' -> 111.110000
' -2.22' -> -2.220000
' Nan' -> 1.#QNAN0
' nan(2)' -> 1.#SNAN0
' inF' -> 1.#INF00
' 0X1.BC70A3D70A3D7P+6' -> 111.110000
'  1.18973e+4932' -> range error, got 1.#INF00

왜 pyzwyz 수   가치를 얻는가?

end - p

  • 답변 # 1

    strtod(p, &end)   end 세트  구문 분석 된 숫자 다음의 다음 바이트를 가리 킵니다. 따라서 초기 문자열로이 호출을하면 결과는 다음과 같습니다.

    111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6  1.18973e+4932zzz
    ^     ^
    p    end
    
    

    end-p  그런 다음 구문 분석 된 숫자의 길이입니다. 쓸 때

    printf("'%.*s' -> ", (int)(end-p), p);
    
    
    이 길이는 .* 에 사용됩니다.   %s 의 크기  필드를 사용하면 문자열의 많은 바이트 만 인쇄 할 수 있습니다.

    그런 다음 루프는 p = end 를 설정합니다  반복해서 이번에는
    111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6  1.18973e+4932zzz
          ^     ^
          p    end
    
    

    루프는 문자열에서 각 숫자를 찾기 위해이 작업을 계속 수행합니다. 문자열의 위치에서 숫자를 구문 분석 할 수 없으면 end 를 설정합니다  입력 문자열을 가리키고 테스트 p != end  루프가 종료됩니다.

관련 자료

  • 이전 python - pytest 정착물 전달 값
  • 다음 snmpdconf에서 Net-SNMP extend를 사용할 때 PEN 이후 OID 객체