comportamento definido de fundido a partir de unsigned char * para char * em Objective-C
-
22-07-2019 - |
Pergunta
Eu entendo a diferença entre os tipos de unsigned char *
e char *
. Eu também entendo como usar reinterpret_cast para lançar um unsigned char *
a um char *
em C ++.
Eu estou usando sqlite3 em Objective-C e estou tentando obter uma NSString
de uma chamada para
sqlite3_column_text(...);
Para fazer isso, eu estou fazendo basicamente:
char *cParam = (char *)sqlite3_column_text(compiledStatementPtr, 0);
NSString *aParam = nil;
if (cParam) {
aParam = [NSString stringWithUTF8String:cParam];
}
sqlite3_column_text()
, no entanto, retorna um unsigned char *
e eu estou preocupado com o comportamento do elenco para char *
. Eu li que o elenco é implemenation específico e eu queria saber se este é um elenco seguro em Objective-C, ou se eu estou totalmente latindo para a árvore errada?
Solução
Você não tem muito que se preocupar devido ao elenco. Na verdade, o código de exemplo Apple usa exatamente o mesmo padrão de código que você está usando:
self.title =
[NSString stringWithUTF8String:(char *)sqlite3_column_text(init_statement, 0)];
(De classe SQLite Book List
Book.m
).
Eu acho que você deveria estar mais preocupado com o banco de dados realmente ter cordas UTF-8
.