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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top