2009-07-06 3 views

답변

4

표준 라이브러리에는 이러한 기능이 없습니다. 임시 버퍼 방법을 사용하거나 처음부터 직접 함수를 작성해야합니다.

1

strntol 아마도 당신이 쓴 것입니다 ... 표준 C가 아닙니다.

1

효율성을 높이기 위해 인 경우을 누르면 효율적으로 작성하고 디버그 할 시간을 가질 수 있습니다.

하지만 사본으로 복사하십시오. 문자열의 길이에 대한 상한선이있을 수 있습니다 (long에 맞는 십진수는 최대 길이에 대해 엄격한 상한을가집니다). 따라서 정적 버퍼를 가질 수 있습니다. 그런 다음 전체 애플리케이션을 프로파일 링하고 복사/변환이 실제로 병목 현상인지 확인하십시오. 그것이 정말로라면, 당신은 당신 자신의 것을 써야한다는 것을 알고 있습니다. 아니, 표준 기능이없는,하지만 자신을 쓸 정도로 간단하다 :

long limited_strtol(const char *string, size_t len) 
{ 
    long sign = 1; 
    long value = 0; 

    for(; len > 0 && *string == '-'; string++, len--) 
    sign *= -1; 

    for(; len > 0 && isdigit(*string); string++, len--) 
    { 
    value *= 10; 
    value += *string - '0'; 
    len--; 
    string++; 
    } 
    return sign * value; 
} 
2

가 귀하의 질문에 대답하려면 :

여기에 거친 (안된, 브라우저 기록) 출발점

#include <stdio.h> 
#include <ctype.h> 

int natoi(char *s, int n) 
{ 
    int x = 0; 
    while(isdigit(s[0]) && n--) 
    { 
     x = x * 10 + (s[0] - '0');  
     s++; 
    } 
    return x; 
} 

int main(int argc, char*argv[]) 
{ 
    int i; 
    for(i = 1; i < argc; i++) 
     printf("%d: %d\n", i, natoi(argv[i], 5)); 
} 
관련 문제