以下是strtol
必须根据§ 7.22.1.4
C11 (n1570) 声明的方式:
#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
, 和行为未定义。这样对吗?