2012-04-02 61 views
0
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); 
    } 

语义问题,本着“初始化字符*与类型为const char丢弃预选赛的表现” char *nameChar = sqlite3_column_text(statement, 1)初始化字符*类型为const char的表达

如果改变char *nameCharchar *nameChar 语义问题“发送签名字符*到类型为const char *的参数”指针之间转换不同的符号为整数类型

回答

7

施放它应该可以解决你的问题。

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

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

请看方法的签名,不是char

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

由于不允许更改'sqlite3_column_text'返回的指针的内容,所以他应该使用第二个选项。他可能需要在'initWithUTF8String:'中进行强制转换以应对签名的差异,但如果文本实际上是UTF-8,它应该是安全的。 – JeremyP 2012-04-02 15:37:26

+0

@JeremyP。你所说的绝对正确的是一个良好的做法。但是即使它被铸造或者做了,也不抱怨或者做任何错误? – Vignesh 2012-04-02 15:42:46

+0

如果你使用前者,它仍然可以工作。删除'const'限定符似乎是错误的。 – JeremyP 2012-04-02 15:50:31

1

这样使用它,它可以帮助

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

更好的实现* nameChar =(字符*)sqlite3_column_text(声明,1);谢谢! – lesyk 2012-04-03 09:30:22

相关问题