我有一个变量列表函数
/* vsprintf example */
#include <stdio.h>
#include <stdarg.h>
void PrintFError (char * format, ...)
{
char buffer[50];
va_list args;
va_start (args, format);
vsprintf (buffer,format, args);
perror (buffer);
va_end (args);
}
int main ()
{
FILE * pFile;
char szFileName[]="myfile.txt";
int firstchar = (int) '#';
pFile = fopen (szFileName,"r");
if (pFile == NULL)
PrintFError ("Error opening '%s'",szFileName);
else
{
// file successfully open
fclose (pFile);
}
return 0;
}
在上面的例子中,我们如何在上面的例子中使用“vsprintf”时检查“PrintError”函数中接收到的消息,我们没有超过这个例子中的缓冲区大小 50。 这应该以可移植的方式实现。
最佳答案
您应该使用更安全的 vsnprintf,并将其限制为最多 50 个字符。
int vsnprintf(char *str, size_t size, const char *format, va_list args);
关于c++ - C 中的可变参数函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4681480/