Objective-C NSString:记录时的奇怪字符

the*_*ott 0 iphone objective-c nslog nsstring

嘿所有,在Objective-C/iPhone开发方面,我总是一个菜鸟.

我正试图从SQLite DB中提取文本.我有一个看起来像这样的while循环:

while(sqlite3_step(selectstmt) == SQLITE_ROW) {
Run Code Online (Sandbox Code Playgroud)

在该循环中,这打印到日志就好了:

NSLog(@"Text: %s",sqlite3_column_text(selectstmt, 1));
Run Code Online (Sandbox Code Playgroud)

这不起作用:

Category *categoryObj = [[Category alloc] initWithPrimaryKey:primaryKey];
categoryObj.categoryName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
NSLog(@"cat name: %s",categoryObj.categoryName);
Run Code Online (Sandbox Code Playgroud)

当我运行上面的内容并查看日志时,我看到:

cat name: ‡}00å
Run Code Online (Sandbox Code Playgroud)

我试着把这个字段写成一个标签,认为它可能是NSLog特有的东西,但没有任何东西出现在那里.很显然,我错过了一些基本的东西,但我不知道它是什么.

Jim*_*uls 12

记录你的字符串%@而不是%s你会没事的.NSStrings不是指向字符的指针,它们是完整的对象,因此您需要在日志格式字符串中使用"object"占位符.

这样做的另一个好处是可以使用非ASCII字符串和所有其他重要的东西来做正确的事情NSString.

请注意,如果您刚刚直接从SQLite记录结果而不是NSString使用它创建结果,那么您的%s结果是正确的.

记住:%s用于C字符串,%@用于Objective-C对象.