【问题标题】:initializing char * with an expression of type const char用 const char 类型的表达式初始化 char *
【发布时间】:2012-04-02 12:51:41
【问题描述】:
NSString *query =  [[NSString alloc] initWithFormat:@"SELECT * FROM objects ", catIdS];
sqlite3_stmt *statement;
    if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, nil) == SQLITE_OK) {
        while (sqlite3_step(statement) == SQLITE_ROW) {
            char *nameChar = sqlite3_column_text(statement, 1);

            NSString *title = [[NSString alloc] initWithUTF8String:nameChar];
       }

       sqlite3_finalize(statement);
    }

char *nameChar = sqlite3_column_text(statement, 1) 行中的语义问题“使用 const char 类型的表达式初始化 char * 丢弃限定符”

如果将char *nameChar 更改为char *nameChar 语义问题“将 unsigned char * 发送到 const char * 类型的参数”在指向具有不同符号的整数类型的指针之间进行转换

【问题讨论】:

    标签: objective-c sqlite


    【解决方案1】:

    铸造它应该可以解决您的问题。

    char *nameChar = (char *)sqlite3_column_text(statement, 1);
    

    const unsigned char *nameChar = sqlite3_column_text(statement, 1);
    

    请看方法的签名,

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

    【讨论】:

    • 他应该使用你的第二个选项,因为你不能改变sqlite3_column_text返回的指针的内容。他可能需要在initWithUTF8String: 中进行转换以应对签名的差异,但如果文本真的是 UTF-8,它应该是安全的。
    • @JeremyP。您所说的对于良好的实践绝对正确。但是即使被施放或做错也不抱怨或做错事?。
    • 如果你使用前者,它仍然可以工作。删除 const 限定符似乎是错误的。
    • @JeremyP。感谢您的建议!。
    【解决方案2】:

    这样使用,可能会有帮助

        NSString *title = [[NSString alloc] initWithUTF8String:(char *)sqlite3_column_text(statement, 1)];
    

    【讨论】:

    • 比 char *nameChar = (char *)sqlite3_column_text(statement, 1); 更好的实现谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多