Я не пробовал, потому что у меня здесь нет компилятора, но, читая справочную страницу, похоже, что вы можете передать точность для "% s":
... Если указана точность, нулевой символ отсутствует
должен присутствовать; если точность не указана или больше
чем размер массива, массив должен содержать завершающий
NUL символ.
Так ты пытался сделать что-то подобное?
snprintf(buffer, sizeof(buffer), "%.*s", bstring_len, bstring);
Как я уже сказал, я не проверял его, и если он работает, он работает, конечно, только если у вас нет байта '\ 0' внутри строки.
РЕДАКТИРОВАТЬ: Я проверил его сейчас, и он работает!