2009-07-06 32 views

Trả lời

4

Không có chức năng như vậy trong thư viện chuẩn. Bạn sẽ phải sử dụng phương pháp đệm tạm thời hoặc viết hàm của riêng bạn từ đầu.

1

strntol có lẽ là những gì bạn đang theo dõi ... tuy nhiên, đó không phải là chuẩn C.

1

Nếu bạn đang rằng được nhấn để đạt hiệu quả, bạn có thể khuyến khích bạn viết và gỡ lỗi cho chính mình.

Nhưng: chỉ cần làm điều đó với một bản sao; bạn có thể có giới hạn trên cho chuỗi dài bao nhiêu (một số thập phân phù hợp trong một số long có giới hạn trên nghiêm ngặt về chiều dài tối đa của nó), vì vậy bạn có thể có bộ đệm tĩnh. Sau đó, hồ sơ toàn bộ ứng dụng của bạn và xem liệu việc sao chép/chuyển đổi có thực sự là một nút cổ chai hay không. Nếu nó thực sự là, sau đó bạn biết bạn cần phải viết của riêng bạn.

Dưới đây là một thô (chưa được kiểm tra, trình duyệt bằng văn bản) khởi điểm:

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

Để trả lời câu hỏi của bạn: không có, không có chức năng tiêu chuẩn, nhưng nó là đủ đơn giản để viết riêng của bạn:

#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)); 
} 
Các vấn đề liên quan