【问题标题】:Why does strtol require a pointer to a pointer rather than a single pointer?为什么 strtol 需要指向指针的指针而不是单个指针?
【发布时间】:2013-10-05 19:42:09
【问题描述】:

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

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

【问题讨论】:

  • 有什么问题?第二个参数的目的是更新一个指向解析序列末尾的指针……

标签: c strtol


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 2023-04-01
    • 2014-01-26
    • 1970-01-01
    相关资源
    最近更新 更多