Определенное поведение приведения из беззнакового char * в char * в Objective-C
-
22-07-2019 - |
Вопрос
Я понимаю разницу между типами 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
.