正确检查nil sqlite文本列

时间:2009-02-28 18:03:49

标签: iphone sqlite

我有一个分配给字符串的sqlite字符串列。在分配之前我需要确保它不是零。我这样做:

char *isNil = sqlite3_column_text(selectstmt, 2);
if(isNil != nil){
  myName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)];}

发出警告:

警告:初始化会丢弃指针目标类型的限定符

这样做的正确方法是什么?

1 个答案:

答案 0 :(得分:7)

当你忽略const时,你会得到警告。 API已定义:

const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);

您正在将返回值分配给char *,因此您将删除const。这就是你得到警告的原因。你应该尊重const。

const unsigned char *isNil = ...

我不是一个真正的客观c家伙,但我认为通过风格来比较主要类型与NULL而不是nil是常见的做法。此外,无需再次调用column_text。

const char *columnText = (const char *)sqlite3_column_text(selectstmt, 2);
if(columnText != NULL)
{
    myName = [NSString stringWithUTF8String: columnText ];
}

你可以看到上面我已经将const unsigned char指针转换为const signed char指针。当你抛弃一个警告说你是正确的事情时,你应该确定你知道。在这种情况下,可以安全地转换为签名字符。一般来说,永远不会抛弃const,因为无论是谁制作了这个API都可能会做一些需要你将数据视为const的东西。