以下是根据来自C11(n1570)的strtol
声明§ 7.22.1.4
的方式:
#include <stdlib.h>
long int strtol (const char *restrict nptr,
char **restrict endptr,
int base);
据我所知,restrict
关键字意味着左侧*nptr
引用的对象只能使用它或直接从它派生的值。
然而,许多程序员,甚至是经验丰富的程序员,都以下列方式使用strtol
:
#include <stdlib.h>
strtol (p, &p, 10);
在这种情况下,**endptr == **&p == *p == *nptr
,行为未定义。是不是?
答案 0 :(得分:8)
没有。无法通过**endptr
中的strtol
访问任何内容。只访问*endptr
,一个完全独立的对象。