c++ - C 中的可变参数函数

标签 c++ 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;
 }

在上面的例子中,我们如何在上面的例子中使用“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/

相关文章:

C - 如何轻松测试它是否是素数?

c - 在 C 中,如何在没有指针的情况下检索超出范围的静态值?

c - 使用 OpenCL 合并两个排序数组

c++ - 套接字重连失败

c++ - 函数中输出容器默认值的开始

c++ - 是什么导致 std::bad_function_call?

C++ 错误 : String Formatting

你能在另一个文件中 extern #define 变量吗?

c - return(sizeof(array)) 给出意想不到的结果

c++ - Boost.Process 检查进程是否终止