Suatu hari saya menemukan diri saya dalam situasi di mana %n
dengan baik akan menyelesaikan masalah saya. Tidak seperti jawaban saya sebelumnya , dalam hal ini, saya tidak dapat menemukan alternatif yang baik.
Saya memiliki kontrol GUI yang menampilkan beberapa teks tertentu. Kontrol ini dapat menampilkan bagian teks itu dengan huruf tebal (atau miring, atau bergaris bawah, dll.), Dan saya bisa menentukan bagian mana dengan menentukan indeks karakter awal dan akhir.
Dalam kasus saya, saya membuat teks dengan kontrol snprintf
, dan saya ingin salah satu dari substitusi dibuat tebal. Menemukan indeks awal dan akhir untuk substitusi ini tidak sepele karena:
String berisi banyak pergantian, dan salah satu dari pergantian tersebut adalah sewenang-wenang, teks yang ditentukan pengguna. Ini berarti bahwa melakukan pencarian teks untuk substitusi yang saya pedulikan berpotensi ambigu.
String format mungkin dilokalkan, dan mungkin menggunakan $
ekstensi POSIX untuk penentu format format. Oleh karena itu mencari string format asli untuk penspesifikasi format itu sendiri tidak mudah.
Aspek lokalisasi juga berarti bahwa saya tidak dapat dengan mudah memecah string format menjadi beberapa panggilan snprintf
.
Oleh karena itu cara paling mudah untuk menemukan indeks di sekitar substitusi tertentu adalah dengan melakukan:
char buf[256];
int start;
int end;
snprintf(buf, sizeof buf,
"blah blah %s %f yada yada %n%s%n yakety yak",
someUserSpecifiedString,
someFloat,
&start, boldString, &end);
control->set_text(buf);
control->set_bold(start, end);