我得到的格式不是字符串文字,也没有格式参数编译错误。格式不是字符串文字和格式参数
这里是我的代码
我想追加的NSMutableArray。
for (int i=0; i<feed.count; i++) {
[html appendFormat:[self.itemName objectAtIndex:i]]; }
有人可以帮助我。
我得到的格式不是字符串文字,也没有格式参数编译错误。格式不是字符串文字和格式参数
这里是我的代码
我想追加的NSMutableArray。
for (int i=0; i<feed.count; i++) {
[html appendFormat:[self.itemName objectAtIndex:i]]; }
有人可以帮助我。
appendFormat:方法需要一个字符串作为第一个参数。
所以您选择发送必须是这样的:
[html appendFormat:@"%@", [self.itemName objectAtIndex:i]];
,虽然你也可以直接追加一个字符串:
[html appendString:[[self.itemName objectAtIndex:i] description]];
我的情况下添加的description
消息的对象不是直接在字符串,要明确。
您打电话给-appendFormat:
,并将变量作为格式字符串。这是一个非常糟糕的主意,因为任何格式说明符(基本上,"%"
后跟另一个字符的任何序列)的存在都将导致-appendFormat:
尝试读取可变参数中的下一个参数,因为它没有提供,因此它将从堆栈中读取垃圾内存并尝试插入它。充其量,这将是一场崩溃。在最坏的情况下,它是安全漏洞的载体。
您应该使用-appendString:
来代替。
请注意,这里假定[self.itemName objectAtIndex:i]
是NSString*
。如果是别的东西,你可以改为附加描述,例如[html appendFormat:@"%@", [self.itemName objectAtIndex:i]]
,或者您可能希望根据其确切类型追加其他内容。
谢谢你指出。我会尝试这个选项。 – HardCode
这段代码应该做什么? -[NSMutableString appendFormat:]
需要format string像@"The %@ says %@"
和“填补空白”与其余的参数。
一些更少使用的格式说明符是危险的,因为它们可以泄露程序中的信息或导致程序崩溃(称为uncontrolled format string attack)。
由于这个原因(因为格式字符串旨在从装配变量的信息),你总是想要的格式字符串本身是一个文本字符串,而不是一个变量或数组。
所以,你可以使用appendFormat:
这样的:
for (int i=0; i<feed.count; i++) {
[html appendFormat: @"%@", [self.itemName objectAtIndex:i]]; }
或者,你可以用appendString:
代替:
for (int i=0; i<feed.count; i++) {
[html appendString:[self.itemName objectAtIndex:i]]; }
没有更多的信息。什么类型的“饲料”?什么类型是'html'?什么类型是'itemName'和它的对象是什么类型?请给我们所有的细节,让我们开始了解你在做什么。 – PengOne
@PengOne:我认为这些类型非常明显。'feed'是某种类型的集合(很可能是'NSArray'),'html'是'NSMutableString','itemName'又是一些集合类型,很可能是'NSArray'。 –
@Kevin:声明“我试图追加NSMutableArray”使这个问题变得很不清楚。此外,把这些信息拼出来是一种很好的做法(如果OP做到了,他可能会回答他自己的问题)。 – PengOne