Reputation: 11441
I have a variable list function
/* 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;
}
In above example how can we check the received message in "PrintError" function that we are not crossing the buffer size in this example 50 while using "vsprintf" in above example. This should be achieved in portable way.
Upvotes: 0
Views: 344
Reputation: 231471
You can use vsnprintf. This is, strictly speaking, non-standard unless you have a C99 compiler, but is supported on most environments. If you do not have an implementation of vsnprintf
on your platform, you can simply add a portable implementation to your program.
Upvotes: 0
Reputation: 6548
Use vsnprintf()
. It allows you to specify the number of characters to output (n
):
int vsnprintf(char *s, size_t n, const char *format, va_list ap);
Upvotes: 0
Reputation: 313
You should use the safer vsnprintf, and limit it to 50 characters maximum.
int vsnprintf(char *str, size_t size, const char *format, va_list args);
Upvotes: 4