当我收到警告时,NSLog仅打印正确的值

JoJ*_*oJo 1 objective-c nsstring

在操作我的一些NSString物体时,我得到了垃圾值.我认为问题源于我对NSString在基本级别的工作方式的误解.下面,我有一个对象,它有一个字符串指针作为合成属性.当我尝试直接将其注销时,编译器会给我一个警告,但它会注销我期望的值.在下一行,我尝试以正确的方式记录该字符串,但我最终得到了垃圾.

代码段

MyObject *object = [self.objects objectAtIndex:indexPath.row];
NSString *myString = object.myString;
NSLog(myString); // format not a string literal and no formal arguments
NSLog(@"formatted = %s", myString);
Run Code Online (Sandbox Code Playgroud)

产量

2011-05-16 13:06:51.137 MyProgram[917:207] thisValueIsGood
2011-05-16 13:06:51.138 MyProgram[917:207] formatted = `å
Run Code Online (Sandbox Code Playgroud)

这个问题已经滚雪球到其他使用这个最终字符串的函数上.当我将该字符串与其他字符串连接起来时,我会得到更多的垃圾.

Adr*_*rli 6

NSString是一个对象,而不是%s使用%@.

  • @JoJo:`%s`适用于`char*`字符串,比如``this string"`.`%@`用于Objective-C对象,比如`@"这个字符串"`.(`@`使它成为`NSString`而不是`char*`) (2认同)