即。 -
int function(char* txt)
{
sprintf(txt, "select * from %s;", table);
//How do I set last char in buffer to NULL here?
}
所以如果表格中的文字有500个字符长,而主要的txt只定义为100 ....
感谢。
答案 0 :(得分:11)
你需要
snprintf()
代替sprintf()
snprintf()
的返回值,以查看保存所有格式化数据所需的缓冲区大小;如果这大于或等于缓冲区的大小,你应该按照你认为合适的方式处理(缓冲区仍然是空终止的,但内容将被截断以适应;这是否正常或错误完全取决于在你的用例上)(你的函数需要一个返回类型......)
答案 1 :(得分:3)
您应该能够使用snprintf来限制使用的缓冲区数量。
function(char* txt, size_t length)
{
int rv;
rv = snprintf(txt, length, "select * from %s;", table);
//How do I set last char in buffer to NULL here?
if (rv >= length) {
// error
}
}
答案 2 :(得分:0)
关于你唯一能做的就是malloc足够的内存,将字符串格式化到那个内存中,并返回一个指向它的指针。然后,调用函数将负责在完成内存时释放内存。