4

这是 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

我确信这个设计决定有一个合乎逻辑的原因,但我不太明白。

4

1 回答 1

3

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

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

于 2013-10-05T19:47:52.830 回答