warning C4800 :Conversion forcée de char* en bool!
Bonjour
Je n'arrive pas à comprendre pourquoi quand je compile :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| void enregistrementErreur ( int compte, ... )
{
va_list liste;
va_start( liste, compte);
char* text;
DateTime^ DateEtHeure = gcnew DateTime;
DateEtHeure = DateTime::Now;
//Ouverture du fichier journal
String^ path = Directory::GetCurrentDirectory() + "\\EnregistrementErreurs.txt";
StreamWriter^ sw = File::AppendText ( path );
sw->WriteLine( DateEtHeure );
for ( int i = 0; i < compte; i++ )
{
text = va_arg ( liste, char* ); //ICI text = "test" par exemple
sw->Write ( "essai" );
sw->Write ( text ); //warning C4800 ICI!!! ????
}
sw->WriteLine();
//Cloture du fichier journal
if ( sw )
delete (IDisposable^)sw;
va_end( liste );
} |
le compilateur me dit ::calim2:
Citation:
.\Annexes.cpp(312) : warning C4800: 'char *': valeur forcée à la valeur booléenne 'true' ou 'false' (avertissement sur les performances)
Là je ne comprends pas ce qu'il se passe!:cry:
Mais pourquoi donc, la variable, char* text, est elle convertie en bool à l'éxécution de sw->Write ( text );alors que sw->Write ( "essai" ); ecrit bien "essai" dans le fichier journal?
J'ai essayé de remplacer char* text; par wchar_t text; ... là ça plante à l"éxécution! A la ligne text = va_arg ( liste, wchar_t ); j'ai :
Citation:
Une exception non gérée du type 'System.InvalidCastException' s'est produite dans essai.exe
Informations supplémentaires*: Le cast spécifié n'est pas valide.
:cry:
Merci de m'aider
J'ai contourné le problème :
Salut,
J'ai préféré refaire ma fonction en c++natif et ça marche :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| void enregistrementErreur ( int compte, ... )
{
va_list liste;
char dateStr [9];
char timeStr [9];
char* fichier = "EnregistrementErreurs.txt";
_strdate_s( dateStr );
_strtime_s( timeStr );
//Ouverture du fichier journal
std::ofstream journal ( fichier, std::ios_base::app );
//Date et heure de l'évennement
journal << dateStr << " " << timeStr << std::endl;
//Envoi de la liste d"arguments dans le fichier journal
va_start( liste, compte);
for ( int i = 0; i < compte; i++ )
{
journal << va_arg ( liste, char* );
}
journal << std::endl;
//Cloture du fichier journal
journal.close();
va_end( liste );
} |
Le problème est contourné...
...Mais j'aimerai comprendre pourquoi, dans la première version ( en c++/cli ) j'ai une conversion forcée de char* en bool.
Si quelqu'un peut m'expliquer? Merci.