void displayinfo(string &filename) { printf("%s% 38s\n", "Filename:", filename); ... Warning: A non-POD object of type "std::string " passed as a variable argument to function "std::printf(const char*, ...)".There is nothing online explaining what that warning means.How would I get the printf to write this (assuming filename = test.txt):Filename: (right justify filename) test.txtThanks in advance.
3 Réponses :
L'explication est assez simple: seuls les gousses (structures de données anciennes simples) peuvent être transmises comme une dispute à une fonction variadique (pas une fonction variable modèle em> cependant, juste une simple fonction variable utilisant les ellipses ). the std :: string code> n'est pas une pod, mais vous pouvez faire: p>
c_str () code> fonction membre
renvoie un const char * code> au CAPSULED C chaîne. p> p>
@ user2369405: content que cela ait aidé
comme un de côté, note que si vous N'avez pas l'intention de modifier ou de copier la chaîne d'entrée, vous devez passer par printf code>
, lorsqu'il est utilisé avec le < Code>% s code> Spécificateur de format, nécessite un pointeur pour char. Vous pouvez obtenir cela à partir d'un std :: string code> via la méthode
c_str () code> méthode:
const code> référence: p>
Je doute sérieusement que le filet serait silencieux. Peut-être avez-vous regardé de mauvais endroits ou avez utilisé NAD KeyWorrs. P>
La règle de base est simple, passant non-cossue comme ... L'argument est un comportement indéfini. Ne le faites pas à moins que votre implémentation a défini un comportement et correspond à votre tâche. P>
et en particulier pour la famille Printf, la chaîne de format nécessite des types spécifiques à réussir, vous avez cassé que même si le passage de POD a fonctionné. P>