NSString stringWithUTF8String在设备上返回null,但在模拟器上确定

时间:2011-10-17 04:39:15

标签: ios-simulator ios5

我有一个非常奇怪的问题。基本上只需将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.

2 个答案:

答案 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];