2013-10-05 64 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

相关问题