Comportamiento definido de conversión de char * sin firmar a char * en Objective-C
-
22-07-2019 - |
Pregunta
Entiendo la diferencia entre los tipos unsigned char *
y char *
. También entiendo cómo usar reinterpret_cast para emitir un unsigned char *
a un char *
en C ++.
Estoy usando sqlite3 en Objective-C y estoy tratando de obtener un NSString
de una llamada a
sqlite3_column_text(...);
Para hacer esto, básicamente estoy haciendo:
char *cParam = (char *)sqlite3_column_text(compiledStatementPtr, 0);
NSString *aParam = nil;
if (cParam) {
aParam = [NSString stringWithUTF8String:cParam];
}
sqlite3_column_text ()
, sin embargo, devuelve un unsigned char *
y me preocupa el comportamiento del elenco a char *
. He leído que el reparto es específico de implementación y me preguntaba si este es un reparto seguro en Objective-C o si estoy ladrando totalmente el árbol equivocado.
Solución
No tienes mucho de qué preocuparte debido al elenco. En realidad, el código de muestra de Apple usa exactamente el mismo patrón de código que está usando:
self.title =
[NSString stringWithUTF8String:(char *)sqlite3_column_text(init_statement, 0)];
(De la clase SQLite Book List
Book.m
).
Creo que debería preocuparse más por la base de datos que realmente tiene cadenas UTF-8
.