4

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

この設計上の決定には論理的な理由があると確信していますが、よくわかりません。

4

1 に答える 1

3

呼び出し元が解析が停止した文字列内の正確な位置を知ることができ、他の方法を使用してストリームの解析を続行するために使用される可能性があるため、2 番目のパラメーターにポインターへのポインターを使用しています。また、 を指定することで完全に無視することもできNULLます。

提案されたスキーマには、これらの有用なプロパティがないことに注意してください。

于 2013-10-05T19:47:52.830 に答える