Comportement défini de la conversion de char non signé * en char * en Objective-C
-
22-07-2019 - |
Question
Je comprends la différence entre les types chars non signés *
et char *
. Je comprends également comment utiliser reinterpret_cast pour convertir un char non signé *
en char *
en C ++.
J'utilise sqlite3 dans Objective-C et j'essaie d'obtenir un NSString
à partir d'un appel à
sqlite3_column_text(...);
Pour ce faire, je fais essentiellement:
char *cParam = (char *)sqlite3_column_text(compiledStatementPtr, 0);
NSString *aParam = nil;
if (cParam) {
aParam = [NSString stringWithUTF8String:cParam];
}
sqlite3_column_text ()
renvoie cependant un char non signé *
et je suis inquiet du comportement de la conversion en char *
. J'ai lu que le casting est spécifique à l'implémentation et je me demandais s'il s'agissait d'un casting sûr en Objective-C ou si j'aboyais totalement le mauvais arbre?
La solution
Vous n'avez pas à vous inquiéter à cause de la distribution. En fait, l'exemple de code Apple utilise exactement le même modèle de code que vous utilisez:
self.title =
[NSString stringWithUTF8String:(char *)sqlite3_column_text(init_statement, 0)];
(à partir de liste de livres SQLite
classe Book.m
).
Je pense que vous devriez être plus préoccupé par le fait que la base de données comporte réellement des chaînes UTF-8
.