2

2番目の議論はどのように機能しstrtolますか?

これが私が試したことです:

strtol(str, &ptr, 10)

ここptrで、char *str文字列です。さて、として渡して印刷strすると'34EF'*ptr正しく表示され、出力されますが、印刷すると、16進アドレスなどのごみの値になるだけではいけませんか?E*(ptr+1)FptrEF!ptr

4

1 に答える 1

5

ptrnullで終了する文字列の内部へのポインタです。したがって、"34EF"それが文字を指していることに'E'なり、そのアドレスで始まる文字列は"EF"です。

のような4文字のC文字列には、p = "34EF"実際には1つに5つの文字列が含まれています。文字列p"34EF"です。文字列p+1"4EF"; 文字列p+2"EF"; p+3は空の文字列"F"です。この場合、。の後のヌルターミネータバイトを指します。p+4""p+4F

空の文字列と言えば、への入力がstrtol数値トークンを構成する有効な文字のみで構成されている場合はptr、空の文字列を指す必要があります。

後続のジャンクを禁止したい場合は、これをテストできます。つまり、有効な数値が解析されても、*ptrが0でない場合、入力の末尾にジャンクがあります。場合によっては、「ユーザーの皆様、10Zdfは数字ではありません。数字を入力してください!」ということを拒否することをお勧めします。

于 2012-04-23T23:25:48.753 に答える