【发布时间】:2013-04-21 15:33:30
【问题描述】:
将变量 x 初始化为 char ** 和将变量 x 初始化为 char * 然后使用 & 有什么区别参考吗?这个问题来自以下查询:
我在看 man 3 strtol 函数。函数签名为:
long strtol(const char *restrict str, char **restrict endptr, int base);
所以,为了传递 endptr 变量,我设置了一个变量:
char **endptr;
但是当我将它传递给函数时,它总是返回 NULL,即使在传递给 strtol 的 str 类似于 abc 的情况下.
即:
char ** endptr;
long exitval = strtol(args[1], endptr, 10); /* try to get the val */
if (endptr != NULL) { /* it wasn't a valid base-10 number */
然而,当我将 endptr 的初始化方式更改为:
char *endptr;
然后将 endptr 作为 &endptr 传递给函数,endptr 设置正确。即:
char * endptr;
long exitval = strtol(args[1], &endptr, 10); /* try to get the val */
if (endptr != NULL) { /* it wasn't a valid base-10 number */
在这两种情况下,我都认为我传递的是 一个指向 char 数组中第一个字符的指针的指针,但事实上一个方法有效而另一个方法无效我的理解是不正确的。
为什么一种方法有效而另一种无效?我误会了什么?
【问题讨论】:
-
你是如何初始化
**endptr的? -
strtol的典型用法可能是char* endptr = NULL; long l = strtol(buf, &endptr, 10);,Linux strtol(3) 手册页提供了完整示例。 -
@minitech,编辑了 Q 以包含所用代码的两个版本。
-
嗯,在新版本中,endpointer 没有指向任何东西(它是未初始化的)。它应该指向一个字符指针。
标签: c