Определенное поведение приведения из беззнакового char * в char * в Objective-C - PullRequest
1 голос
/ 05 августа 2009

Я понимаю разницу между типами unsigned char * и char *. Я также понимаю, как использовать reinterpret_cast для преобразования unsigned char * в char * в C ++.

Я использую sqlite3 в Objective-C и пытаюсь получить NSString от звонка на

sqlite3_column_text(...);

Для этого я в основном делаю:

char *cParam = (char *)sqlite3_column_text(compiledStatementPtr, 0);
NSString *aParam = nil;
if (cParam) {
    aParam = [NSString stringWithUTF8String:cParam];
}

sqlite3_column_text(), однако, возвращает unsigned char *, и меня беспокоит поведение приведения к char *. Я читал, что приведение зависит от реализации, и мне было интересно, это безопасное приведение в Objective-C или я полностью лаю не на том дереве?

1 Ответ

4 голосов
/ 06 августа 2009

Вам не о чем беспокоиться из-за актерского состава. На самом деле, пример кода Apple использует тот же шаблон кода, который вы используете:

self.title =
  [NSString stringWithUTF8String:(char *)sqlite3_column_text(init_statement, 0)];

(от SQLite Book List Book.m класс).

Я думаю, вы должны быть более озабочены тем, что база данных имеет UTF-8 строк.

...