Comportamento definito del cast da unsigned char * a char * in Objective-C
-
22-07-2019 - |
Domanda
Comprendo la differenza tra i tipi unsigned char *
e char *
. Comprendo anche come utilizzare reinterpret_cast per trasmettere un carattere senza segno *
in un carattere *
in C ++.
Sto usando sqlite3 in Objective-C e sto cercando di ottenere un NSString
da una chiamata a
sqlite3_column_text(...);
Per fare questo, sostanzialmente sto facendo:
char *cParam = (char *)sqlite3_column_text(compiledStatementPtr, 0);
NSString *aParam = nil;
if (cParam) {
aParam = [NSString stringWithUTF8String:cParam];
}
sqlite3_column_text ()
, tuttavia, restituisce un carattere non firmato *
e sono preoccupato per il comportamento del cast su char *
. Ho letto che il cast è specifico per l'implementazione e mi chiedevo se si tratta di un cast sicuro in Objective-C o se abbaio totalmente l'albero sbagliato?
Soluzione
Non hai molto di cui preoccuparti a causa del cast. In realtà, il codice di esempio di Apple utilizza lo stesso modello di codice che stai utilizzando:
self.title =
[NSString stringWithUTF8String:(char *)sqlite3_column_text(init_statement, 0)];
(Da Elenco libri SQLite
Book.m
).
Penso che dovresti essere più interessato al database che in realtà ha stringhe UTF-8
.