当前位置:  开发笔记 > 数据库 > 正文

正确检查nil sqlite文本列

如何解决《正确检查nilsqlite文本列》经验,为你挑选了1个好方法。

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

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

这给出了警告:

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

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



1> Andrew Barre..:

当你忽略const时,你会得到警告.API定义如下:

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

你将返回分配给char*,所以你要删除const.这就是你得到警告的原因.你应该尊重const.

const unsigned char *isNil = ...

我不是一个非常客观的人,但我认为通过风格来比较主要类型与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的东西.

推荐阅读
linjiabin43
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有