А не вариант чуть-чуть переправить то, что у вас исторически сложилось?
Если не вариант - пробуйте что я вам предложил, или через snprintf, как предложил eXire.
ну я раньше делал как ты написал, а сейчас поправил (надеюсь везде, кода много), так что вопрос теперь уже скорее академический. Ибо я где-то видел, как это сделать средствами самих параметров к printf.
Только не пойму, зачем вам это надо? Что, строка на 1 символ длиннее буфера для нее?
мне тоже на практике это еще никогда не нужно было но видел в исходниках вот например кусок кода из файла pcredemo.c библиотеки PCRE
/* The output vector wasn't big enough */
if (rc == 0)
{
rc = OVECCOUNT/3;
printf("ovector only has room for %d captured substrings\n", rc - 1);
}
/* Show substrings stored in the output vector by number. Obviously, in a real
application you might want to do things other than print them. */
for (i = 0; i < rc; i++)
{
char *substring_start = subject + ovector[2*i];
int substring_length = ovector[2*i+1] - ovector[2*i];
printf("%2d: %.*s\n", i, substring_length, substring_start);
}
хотя конечно можно банально было перед выводом скопировать найденный item и вывести но так короче и меньше писать хотя это дело вкуса кому то это покажется отвратительным