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.

¿Fue útil?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top