J'ai ce code dans un constructeur d'une classe (pas écrit par moi) et il écrit une liste d'arguments variable dans un fichier tmp.var arg liste au fichier temporaire, pourquoi est-il nécessaire?
Je me demandais pourquoi cela serait nécessaire? Le tmpfile est supprimé après que ce ctor est hors de portée et la liste d'arguments var se trouve dans le vecteur m_str. Quelqu'un peut-il suggérer une meilleure façon de le faire sans l'utilisation d'un tmpfile?
DString(const char *fmt, ...)
{
DLog::Instance()->Log("Inside DString with ellipses");
va_list varptr;
va_start(varptr, fmt);
FILE *f = tmpfile();
if (f != NULL)
{
int n = ::vfprintf(f, fmt, varptr) + 1;
m_str.resize(n + 1);
::vsprintf(&m_str[0], fmt, varptr);
va_end(varptr);
}
else
DLog::Instance()->Log("[ERROR TMPFILE:] Unable to create TmpFile for request!");
}
Pouvez-vous changer le prototype du constructeur pour éviter d'utiliser des ellipses? – ereOn
ereOn: Aucune cause Cela causerait beaucoup d'erreurs dans mon code. –
Si 'm_str' est un' std :: string', alors traiter '& m_str [0]' comme un pointeur sur un tableau donne un comportement indéfini; le stockage n'est pas garanti contigu.Si c'est un 'std :: vector', alors c'est OK. –