【问题标题】:What does this mean? Initialization discards qualifiers from pointer target type这是什么意思?初始化丢弃来自指针目标类型的限定符
【发布时间】:2011-04-07 02:39:10
【问题描述】:

我正在尝试以详细视图从 sqlite 数据库加载文本,但出现此错误。

初始化会丢弃来自指针目标类型的限定符。

这是什么意思?以及我该如何解决。请帮忙。这是我的代码。

-(void) hydrateDetailViewData {
        if (isDetailViewHydrated) return; 

        if (detailStmt == nil) {
                const char *sql = "Select ClubAddress from clubNames Where clubID = ?";
                 if (sqlite3_prepare_v2(database, sql, -1, &detailStmt, NULL) !=SQLITE_OK)
                         NSAssert1(0, @"Error while creating detail view statment. '%s'", sqlite3_errmsg(database));
                 }
        sqlite3_bind_int(detailStmt, 1, clubID);

        if (SQLITE_DONE != sqlite3_step(detailStmt)) {
                char *db_text = sqlite3_column_text(detailStmt, 2); //error showing here
                NSString *address = [NSString stringWithUTF8String: db_text];
                self.ClubAddress = address;
        }
        else
                NSAssert1(0, @"Error while getting the address of club. '%s'", sqlite3_errmsg(database));
        sqlite3_reset(detailStmt);

        isDetailViewHydrated = YES;
}

谢谢。

【问题讨论】:

    标签: iphone xcode sqlite


    【解决方案1】:

    sqlite3_column_text 被声明为返回const unsigned char *,并且您将它分配给char * 类型的变量。这会丢失 const 限定符,因此编译器会警告您这一事实。

    【讨论】:

    • 当我添加 const char 时,我收到以下错误“初始化中的指针目标签名不同”并且应用程序崩溃。调试还显示它现在不再拾取数据库项目。任何帮助。@Anomie
    • @wayne:该警告是因为 const char * 是一个指向有符号字符的指针(即保存从 -128 到 127 的值),而 const unsigned char * 是一个指向无符号字符的指针(即保存来自0 到 255)。
    • 任何想法如何解决这个问题将不胜感激。
    【解决方案2】:

    这也可以:

    char* foo = (char *)sqlite3_column_text(statement, 1);
    NSString* Foo = (foo) ? [NSString stringWithUTF8String:foo] : @"";
    

    【讨论】:

      猜你喜欢
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 2011-03-19
      • 2013-03-02
      相关资源
      最近更新 更多