2013-06-26 70 views
2

strtol解析出給定字符串中的長整數。好的。但是,我怎麼能檢查是否有任何解析?我如何檢查strtol是否解析了任何內容?

例如:

  • 以下字符串產量0使用strtol
    0abcdef
  • 然而
  • ,以下字符串產量0也使用strtol
    abcdef

所以,我沒有指示是否f unction解析了有效的0或根本沒有解析任何東西,因此返回0

如何驗證strtol是否正常工作或返回錯誤?有沒有其他的選擇?

I read that strtol sets an errno在Unix上,但我特別感興趣的是Win32平臺。

回答

3

這是()與strtol的簽名:

long int strtol(const char *nptr, char **endptr, int base); 

如果endptr不爲空,strtol()專賣店在*endptr第一個無效字符的地址。 因此,您可以簡單地比較*endptrnptr,如果不同,strtol()已解析*endptr之前的字符。

+0

這麼簡單。謝謝。 – eckes

+0

不客氣@eckes – nouney

+0

它不一定是第一個無效字符 - 例如一個空白的初始序列是有效的,但即使字符串以空白開頭,如果沒有執行轉換,那麼保證nptr的值'將被存儲在'* endptr'中。 – caf

1

使用strtol的第二個參數:它是char **。它將填充第一個無效字符:take a look at this manpage

例子:

#include <stdlib.h> 
int main() 
{ 
    char  *ptr = 0; 
    const char *str = "1234abcd"; 

    printf("%d\n", strtol(str, &ptr, 10)); // -> 0 
    printf("ptr: %c\n", *ptr); // -> 'a' 
    while (*str && *str != *ptr) 
    { 
     printf("parsed: %c\n", *str); // -> '1' '2' '3' & '4' 
     ++str; 
    } 
    return 0; 
} 
相關問題