trial and error and error and...

勉強の記録とか、備忘録的な何か。

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の戻り値を利用すれば、このように非常に簡単に桁数を知ることができます。
ただし、負符号が付くと出力される文字がひとつ増えるので、そういった場合などには注意が必要です。