我有一个非常奇怪的问题。基本上只需将char转换为nsstring并将它们存储在一个nsmutable数组中。
但代码在模拟器上运行正常,但在设备上崩溃。
这是崩溃代码,
char t = 'A' + i;
NSString* alphabetString = [NSString stringWithUTF8String:&t]; //substringToIndex:1];
[tempArray addObject:alphabetString];
stringWithUTF8String基本上会在设备上返回NULL,但在模拟器上返回有效值。
The device is an iPhone 4s.
I did not see any notification of changes on NSString stringwithutf8string on iOS5 release.
Thanks.
答案 0 :(得分:2)
单个char
的地址不是 C风格的字符串。你需要确保它的终止类似于:
char t = 'A' + i;
char s[2]; s[0] = t; s[1] = '\0';
NSString* alphabetString = [NSString stringWithUTF8String:s];
来自docpage:
<强>参数强>
bytes :UTF8编码中以NULL结尾的C字节数组。
答案 1 :(得分:2)
您无法将单个char
值的地址传递给-stringWithUTF8String
。该函数期待一个以null结尾的字符串,并且你没有传递它。这会导致未定义的行为:任何事情都可能发生。它似乎可能成功,它可能会失败,或者它可能会擦除您的文件系统。但更可能的是,它只会让你的程序崩溃。
您应该创建一个以空字符结尾的双字符数组:
char t[2] = {'A' + i, 0}; // Two-character null-terminated array
NSString* alphabetString = [NSString stringWithUTF8String:t];
或者,您也可以使用-stringWithFormat:
和%c
格式说明符来获取包含单个字符的字符串:
NSString* alphabetString = [NSString stringWithFormat:@"%c", 'A' + i];