sprintf() problème avec XP seulement
Bonsoir à tous,
Je fais face à un petit problème assez embêtant avec une fonction de base du C: sprintf().
J'ai essayé le code sous Windows Vista et Windows XP. Je viens de me rendre compte aujourd'hui que sous XP, la même ligne de code ne produisait pas le même résultat.
Pour une petite idée voilà le code. Pour info nom_fichier correspond à un wxString (je suis sous wxWidgets).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
wxFileName fname(chemin_fichier); //Pour pouvoir récupérer nom du fichier + extension
wxString nom_fichier = fname.GetFullName();
//Ici je peux afficher le nom+extension sans aucun problème
size_t t_tempo = nom_fichier.Len(); // Taille chaine nom_fichier
// Controle dela taille retournée = nb caractères = OK
// Ces 3 lignes sont là juste pour tester
char test[34];
sprintf(test,"%s",nom_fichier.c_str());
wxMessageBox(wxT(test),"chemin depuis tableau",wxOK); // Ici j'affiche bien le nom du fichier sans problème
char trame_init[(int)t_tempo+34]; // Tableau pour recevoir les données avant insertion dans le tableau (+34 inclu 13 caractères pour chaque long long int et les spérateurs (|) )
sprintf(&trame_init[4],"%lli|%lli|%i|%s",this->taille_fichier,this->start,demande_retour,nom_fichier.c_str()); // Insertion dans tableau temporaire
wxMessageBox(wxT(&trame_init[4]),"tableau envoi",wxOK);
// Ici en affichant la trame "composée" la dernière partie qui devrait correspondre à ma chaine (nom du fichier) est remplacée par (null). Et ce problème ne se produit que sous XP! |
Comme je viens de le noter juste au dessus, le problème intervient au niveau du sprintf() qui si je met avant des %lli etc... me met une chaine vide dans le tableau (les vérifs sont faites avant donc le problème vient bien de cette instruction précise). Théoriquement pas de débordement de mémoire, il y a même plus que nécessaire. De plus le problème se pose que sous XP. La même application exécutée sous Vista ne pose pas le problème et ne l'a jamais posé.
Merci à ceux qui auraient une idée :)
Bonne soirée à tous