programing

sscanf에서 읽은 문자 수를 가져오시겠습니까?

bestprogram 2023. 9. 19. 21:20

sscanf에서 읽은 문자 수를 가져오시겠습니까?

문자열을 파싱하고 있습니다.char*)을 사용하고 있습니다.sscanf다음과 같이 문자열의 숫자를 두 배로 구문 분석합니다.

// char* expression;
double value = 0;
sscanf(expression, "%lf", &value);

이것은 잘 작동하지만, 저는 이제 기존의 방법을 통해 문자열을 계속 분석하고 싶습니다.얼마나 많은 캐릭터가 파싱을 당했는지 알아야 합니다.sscanf새로운 오프셋에서 수동 파싱을 재개할 수 있도록 말입니다.

분명히, 가장 쉬운 방법은 어떻게든 다음과 같은 문자의 수를 계산하는 것일 것입니다.sscanfpars, 하지만 간단한 방법이 없다면, 저는 대안적인 이중 parsing 옵션에 열려있습니다.하지만 저는 지금 사용하고 있습니다.sscanf빠르고 간단하며 가독성이 좋기 때문입니다.어느 쪽이든 더블을 평가하고 파싱을 계속하는 방법이 필요합니다.

형식 지정자를 사용할 수 있습니다.%n그리고 추가로 제공합니다.int *의론.sscanf():

int pos;
sscanf(expression, "%lf%n", &value, &pos);

형식 지정자에 대한 설명nC99 표준부터:

투입량이소모되지않습니다.해당 인수는 함수에 대한호출로 지금까지 입력 스트림에서 읽은 문자의 수를 기록해야 하는 부호 있는 정수에 대한 포인터여야 합니다.A의 실행%n명령은 실행 완료 시 반환되는 할당 카운트를 증가시키지 않습니다.fscanf기능.변환된 인수는 없지만 하나는 사용됩니다.변환 규격에 할당 억제 문자 또는 필드 너비가 포함되어 있으면 동작이 정의되지 않습니다.

반환 값을 항상 확인합니다.sscanf()할당이 이루어졌는지 확인하고 이후 코드는 값이 변경되지 않은 변수를 잘못 처리하지 않습니다.

/* Number of assignments made is returned,
   which in this case must be 1. */
if (1 == sscanf(expression, "%lf%n", &value, &pos))
{
    /* Use 'value' and 'pos'. */
}
int i, j, k;
char s[20];

if (sscanf(somevar, "%d %19s %d%n", &i, s, &j, &k) != 3)
    ...something went wrong...

변수가k에 저장된 정수의 끝 부분까지의 문자 수를 포함합니다.j스캔 되었습니다.

참고하세요.%n성공적인 변환에는 포함되지 않습니다.사용가능%n필요한 경우 형식 문자열에 여러 번 입력합니다.

언급URL : https://stackoverflow.com/questions/13503135/get-number-of-characters-read-by-sscanf