%n というマイナーなフォーマット指定子があります
%n が出現するまでに書かれた文字数を、指定したメモリアドレスに書き込みます
int main() { int n = 99; printf("hoge%n\n", &n); printf("%d\n", n); // 4 }
なんで printf がメモリ書き換えるんだよ!