如何防止char指针缓冲区溢出?

T.T*_*.T. 4 c arrays pointers reference

即 -

int function(char* txt)
{
   sprintf(txt, "select * from %s;", table);
   //How do I set last char in buffer to NULL here?
}
Run Code Online (Sandbox Code Playgroud)

所以,如果表中的文字有些是500个字符长,而主要的txt只被定义为100 ....

谢谢.

Jam*_*lis 11

你需要

  • 在函数中添加一个参数,给出缓冲区的大小
  • snprintf()而不是sprintf()
  • 检查返回值,snprintf()以查看保存所有格式化数据所需的缓冲区大小; 如果这大于或等于缓冲区的大小,你应该按照你认为合适的方式处理(缓冲区仍然是空终止的,但内容将被截断以适应;这是否正常或错误完全取决于在你的用例上)

(并且您的函数需要返回类型...)