printfの戻り値
C言語を勉強しようと思った人が最初に学ぶ関数は、おそらくprintfでしょう。
かくいう私もそうでした。
任意の文字列の出力に使うこのprintf。
実は、出力した文字列のバイト数という、int型の戻り値を持っています。
使用例
ソース
#include <stdio.h> int main(void) { int a; a = printf("kitty on your lap\n"); printf("%d\n", a); return 0; }
実行結果
kitty on your lap 18
"kitty on your lap"という文字列。
スペースも含めると、17文字ですね。それに加えて改行文字があるので、18文字。
半角英数字は1文字1バイトなので、出力する文字列は18バイトとなります。
応用例
この戻り値を利用して、任意の変数の桁数を知ることができます。
ソース
#include <stdio.h> int main(void) { int a, b; char dummy[10]; a = 123456; b = sprintf(dummy, "%d", a); printf("%d\n", b); return 0; }
実行結果
6
まず、変数の内容を画面に出力する必要は無いため、sprintfを用いてダミーに文字列を出力しました。
sprintfは、printfの出力先が標準出力から変数になった関数です。
正攻法で行けば、任意の整数を0になるまで10で割り続け、割った回数を桁数とするところですが、printfの戻り値を利用すれば、このように非常に簡単に桁数を知ることができます。
ただし、負符号が付くと出力される文字がひとつ増えるので、そういった場合などには注意が必要です。