首先请让我说我对客观的c开发很新.我正在为iphone编写一个供个人使用的小应用程序,但是在执行以下代码时遇到了一些问题:
NSString *sql = [[NSString alloc] initWithFormat:@"select color_r, color_g, color_b from Calendar where ROWID = %@", [calendarsID objectForKey:[arrayColors objectAtIndex:row]]]; sqlite3_stmt *selectstmt; if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK)
编译器告诉我,我从不兼容的指针类型传递sqlite3_prepare_v2的参数2.无论如何,程序会被编译并运行,但是当它必须执行我刚刚向您显示的代码时,它会产生错误.它表示查询中存在语法错误,语法错误仅在查询的最后部分.而不是:
从Calendar中选择color_,color_g,color_b,其中ROWID = 63(例如)
我在最后一个数字的位置得到了奇怪的字符(63).我想这是一个与字符串转换有关的问题.可以请任何人帮帮我吗?
非常感谢您的关注.阿莱西奥
问题是a NSString
不是sqlite3_prepare_v2()
第二个论点所期望的.它想要一个const char*
.C在这里有点松懈,它允许你隐式地转换NSString*
为a const char*
,这是错误的 - 编译器给你一个你不应该忽略的警告.
你需要将其NSString
转换为const char*
.最简单的方法是使用-UTF8String
消息将其转换为UTF-8:
// V---- HERE ----V if(sqlite3_prepare_v2(database, [sql UTF8String], -1, &selectstmt, NULL) == SQLITE_OK)
或者,在不太可能的情况下,您希望使用不同的编码,您可以使用该-cStringUsingEncoding:
消息将字符串转换为使用特定字符编码的C字符串.