atoiコマンドで非常に基本的なCコードを書いて実行しました。私はこのatoiコマンドがなぜ動作するのかを教えてください。
void
main
(void)
{
int length;
length = atoi("Content: 111");
printf("atoi(\"Content: 111\") = %d\n",length);
length = atoi("Content: 111" + 10);
printf("atoi(\"Content: 111\" + 10) = %d\n",length);
length = atoi("Content: 1" + 6);
printf("atoi(\"Content: 1\" + 6) = %d\n",length);
length = atoi("Content: 111" + 12);
printf("atoi(\"Content: 111\" + 12) = %d\n",length);
length = atoi("Content-aaaaaa: 111" + 20);
printf("atoi(\"Content-aaaaaa: 111\" + 20) = %d\n",length);
printf("\"aaa\"+7 = %s","aaa"+7);
}
出力は以下のようになります。
atoi("Content: 111") = 0
atoi("Content: 111" + 10) = 111
atoi("Content: 1" + 6) = 0
atoi("Content: 111" + 12) = 0
atoi("Content-aaaaaa: 111" + 20) = 111
"aaa"+7 = ;
これは可能ですか?なぜatoiが+ intで書いた文字の量をスキップするのですか? 私はエラーではありませんか? と、なぜ最後のprintfも働いたのですか?
私は、マニュアルを読み、この動作については何もありません:
int型ATOI(定数するchar * strが)。 文字列を整数に変換する 内容を整数型として解釈するC文字列strを解析し、int型の値として返されます。
この関数は、空白以外の最初の文字が見つかるまで、必要なだけ多くの空白文字(isspaceと同じ)を破棄します。次に、この文字から始めて、オプションの最初のプラス記号またはマイナス記号の後にできるだけ多くの10進数を取り、それらを数値として解釈します。
文字列には、整数を構成する文字の後に追加の文字を含めることができます。この文字は無視され、この関数の動作には影響しません。
strの非空白文字の最初のシーケンスが有効な整数でない場合、またはstrが空であるか空白文字のみを含むためにそのようなシーケンスが存在しない場合、変換は実行されず、ゼロが返されます。
これは 'atoi'とは関係ありませんが、ポインタの算術演算ではなく –