为什么strtol需要指向指针而不是单个指针?

时间:2013-10-05 19:42:10

标签: c strtol

以下是C标准库例程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 个答案:

答案 0 :(得分:2)

它使用指向第二个参数的指针,因为它允许调用者知道解析已经停止的字符串中的确切位置 - 并且可以用于继续使用其他方法解析流。此外,它允许通过提供NULL来完全忽略它。

请注意,您提出的架构不具备这些有用的属性。