NSString* en char*?
Je écrire un morceau de code qui utilise à la fois le c++ et l'Objective C.
J'ai besoin de convertir NSString*
à char*
. [str UTF8string]
ne fonctionne pas car il renvoie const char*
. Je sais:
-
std::string
->char*
:char* c = const_cast<char*>(pathStr.c_str());
-
NSString*
->std::string
: lien
Mais il semble trop étrange et je ne peux pas le vérifier. Puis-je le convertir dans une meilleure façon, par exemple, NSString*
-> const char*
-> char*
- Pourquoi ne yo besoin char* et non const char*? - avez-vous vraiment besoin de le modifier (même si C++ utilise std::string plutôt que char* pour la manipulation)
- Cela peut vous aider stackoverflow.com/questions/2996657/...
- J'ai besoin de char*, non const char*. Votre commentaire est offtop
Vous devez vous connecter pour publier un commentaire.
Convertir un char*
Aussi longtemps que vous ne souhaitez pas modifier... si vous le faites alors strcpy dans le char tableau.
Je suppose que cela dépend juste de ce que vous voulez faire avec elle.
À noter:
Si vous prévoyez de modifier la chaîne, ou si vous prévoyez de l'utiliser pendant une période prolongée de temps, ne l'exemplaire de l'opération. Ou utiliser
getCString:maxLength:encoding:
de créer directement la copie.Si vous n'avez pas l'intention de modifier la chaîne puis, il y a en théorie pas besoin de jeter à la non-const (même s'il est vrai que de nombreuses interfaces appel à un
char*
parm quand ils devraient l'appeler pourconst char*
, vous aurez donc parfois de tricher).NSString
objet et de le passer à une fonction. Donc, si je convertis avecgetCString:
en dehors de la fonction puis-je de façon fiable ontchar*
variable jusqu'à ce que cette fonction aurait été fini, n'est-ce pas?Mon C++ est un peu rouillé, mais vous devez décider si votre chaîne de caractères ASCII ou Unicode, puis aller à partir de là. Par exemple:
Si vous voulez une chaîne Unicode, vous devez d'abord construire un uint16_t null tableau, et le passer au constructeur:
Ci-dessus devrait fonctionner pour la plupart des chaînes Unicode, mais si vos personnages sont de vraies 32 bits, alors vous devez utiliser l'option " wstring l'aide d'un code similaire pour le second exemple.
Ce que vous êtes plus probablement l'expérience est un avertissement du compilateur comme:
Le compilateur donne un avertissement spécifique parce que sans le qualificatif const le pointeur peut être derefenced et puis modifié. Ce n'est pas seulement une technicité et est en fait une waring qui doit être traitée avec soin.
Découvrez cette autre réponse pour plus d'informations
char const *
n'est pas du même type quechar *
. Et de l'affectation de la première à la seconde est une erreur, pas un avertissement.