如何替换字符数组中的字符?Xcode



我在Objective-C(Xcode)中得到了以下char数组

char *incomeMessage;

NSString *str = [[NSString alloc] initWithBytes:data.bytes length:data.length encoding:NSUTF8StringEncoding];
incomeMessage = [str UTF8String];
NSLog(@"%c", incomeMessage[0]);
NSLog(@"%c", incomeMessage[1]);
NSLog(@"%c", incomeMessage[2]);
NSLog(@"%c", incomeMessage[3]);
NSLog(@"%c", incomeMessage[4]);
NSLog(@"%c", incomeMessage[5]);

例如,我在控制台中得到一些这样的结果:

"3
 2
 6
 1
 8
 4"

现在我想将收入消息[2]中的字符替换为4:

incomeMessage[2] = '4';

但随后它给了我错误:EXC_BAD_ACCESS

你有想法,如何解决问题吗?

根据参考文档,UTF8String返回对字符串数据的只读(const char*)引用。

参考资料继续指出:

此 C 字符串是指向字符串对象内部结构的指针, 其生存期可能比字符串对象短,并且将 当然没有更长的寿命。因此,您应该复制 C 字符串,如果它需要存储在内存上下文之外,其中 使用此属性。

所以我建议听从他们的建议,创建一个数组的副本,然后针对它执行修改。

例如:http://ideone.com/mhjwZW

您可能会有更好的运气,例如:

NSString* str = [[NSString alloc] initWithBytes:data.bytes length:data.length encoding:NSUTF8StringEncoding];
char* incomeMessage = malloc([str lengthOfBytesUsingEncoding:NSUTF8StringEncoding] + 1);
strcpy(incomeMessage, [str UTF8String]);
//now you can change things    
incomeMessage[2] = '4';
//do this when you're done
free(incomeMessage);

虽然,有什么特别的原因为什么要使用 C 字符串/字符数组而不是 NSMutableString ? 我想你可能会发现替换字符在范围:与字符串:一般来说是一个更好的方法。 另请参阅:stringByReplacingCharactersInRange:withString:。

我在Objective-C(Xcode)中得到了以下char数组

你没有,你知道的。你所拥有的只是一个指针。你没有留出任何实际的记忆;那里没有数组。

incomeMessage = [str UTF8String];

您在该行中所做的只是将指针incomeMessage指向字符串的UTF8String。字符串的UTF8String是不可变的。请注意文档中的这段话:

如果需要将 C 字符串存储在使用此属性的内存上下文之外,则应复制该字符串。

所以基本上,如果你想写进一个char数组,你的首要任务应该是制作一个char数组。

最新更新