2013-10-05 63 views
2

這裏的原型常規的C標準庫strtol爲什麼strtol需要一個指針而不是單個指針?

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

典型用途:

const char* str = "123a"; 
char* endptr; 
long int value = strtol(str, &endptr, 10); 

if (*endptr) 
    // Do something 
else 
    // Do something else 

爲什麼做這樣?爲什麼不傳遞一個局部變量的地址?

例子:

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

用法:

const char* str = "123a"; 
char end; 
long int value = strtol(str, &end, 10); 

if (end) 
    // Do something 
else 
    // Do something else 

我敢肯定有這個設計決定是合情合理的理由,但我不太看出來。

+1

什麼問題?第二個參數的目的是更新一個指向解析序列末尾的指針... –

回答

2

它正在使用指向第二個參數的指針,因爲它允許調用者知道解析已停止的字符串中的確切位置 - 並可用於繼續使用其他方法解析流。此外,它允許通過提供NULL完全忽略它。

請注意,您提出的模式不具備這些有用的屬性。

+0

您提到的好點。謝謝! – ffhaddad

相關問題