[英]variable argument function in C
我有一个变量列表功能
/* 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;
}
在上面的示例中,我们如何在“ PrintError”函数中检查接收到的消息,即在该示例50中使用“ vsprintf”时,我们在示例50中未超过缓冲区大小。 这应该以可移植的方式实现。
您应该使用更安全的vsnprintf,并将其限制为最多50个字符。
int vsnprintf(char *str, size_t size, const char *format, va_list args);
您担心缓冲区溢出是正确的。 您不能使用vsprintf来做到这一点,但是可以使用vsnprintf来做到这一点,它包括一个参数,该参数是缓冲区的长度。
使用vsnprintf()
。 它允许您指定要输出的字符数( n
):
int vsnprintf(char *s, size_t n, const char *format, va_list ap);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.