我理解unsigned char *
和char *
类型之间的区别。我也了解如何使用reinterpret_cast将unsigned char *
转换为C ++中的char *
。
我在Objective-C中使用sqlite3,并试图通过调用
来获取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中的安全演员,或者我是否完全咆哮了错误的树?
答案 0 :(得分:4)
由于演员而你没有太多担心。实际上,Apple示例代码使用的是与您使用的完全相同的代码模式:
self.title =
[NSString stringWithUTF8String:(char *)sqlite3_column_text(init_statement, 0)];
(来自SQLite Book List
Book.m
类)。
我认为您应该更关心实际拥有UTF-8
字符串的数据库。