6

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、、、および動作は未定義です。正しいですか?

4

1 に答える 1

8

いいえ。では何もアクセスさ**endptrれませんstrtol*endptr完全に別個のオブジェクトである、のみがアクセスされます。

于 2013-02-14T16:47:37.880 に答える