Определенное поведение приведения из беззнакового char * в char * в Objective-C

StackOverflow https://stackoverflow.com/questions/1235341

Вопрос

Я понимаю разницу между типами 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 или я полностью лаю не на том дереве?

Это было полезно?

Решение

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

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

(из класса Список книг SQLite Book.m ).

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top