2009-09-25 6 views
1

SO, je suis en train de résoudre le port d'une application 32 bits à 64 bits. Quand je compile pour x64 je vois un avertissement venir pour la ligne ` CString sig; sig = "quelque chose"; Sig = sig.left (strlen (quelque chose de défini)) < < < < < <VC++ application CLI 32 - 64 bits CString question

` Alors, je reçois l'avertissement pour le sig.left où il convertit implicitement la valeur de strlen int. Comme dans x64, strlen renvoie la taille 64bit_t, j'obtiens l'avertissement. quelles sont mes options pour résoudre ce problème .. toute autre méthode?

Merci

+0

Puisque vous migrez le code existant, vous êtes probablement coincé avec CString, mais en général, vous devriez probablement utiliser le std :: string standard. – Dima

Répondre

3

strlen retourne toujours size_t. Cependant, taille_t est une largeur différente sur les systèmes d'exploitation 64 bits et 32 ​​bits.

CString.left, cependant, attend un int. Votre code devrait être correct (à condition que vos chaînes ne soient pas trop longues pour dépasser une valeur int), mais le compilateur vous avertira que vous êtes à l'origine de ce problème.

Vous pouvez ignorer l'avertissement en utilisant une distribution. Si vous vouliez être "sûr", vous pourriez le faire en ajoutant une vérification.

Le casting requis serait aussi simple que:

CString sig; 
sig = "something"; 
sig = sig.left((int)strlen(something_defined)); 
+0

la courte coulée a fixé mon avertissement. Mais je veux explorer la réécriture quand il y a le temps. – Gentoo

Questions connexes