2011-10-17 68 views
0

我有一個非常奇怪的問題。基本上只需將一個char轉換爲nsstring並將它們存儲在一個nsmutable數組中。NSString stringWithUTF8String在設備上返回null,但在模擬器上正常

但是代碼在模擬器上運行正常,但在設備上崩潰。

這裏是崩潰代碼,

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

你試圖通過這個來實現:char t ='A'+ i;這是它引起我懷疑的問題的地方。然後你在stringWithUTF8String方法中傳遞字符橫向的引用。 – UPT

回答

2

char的地址是 C風格的字符串。您需要確保它是空的東西,如終止:

char t = 'A' + i; 
char s[2]; s[0] = t; s[1] = '\0'; 
NSString* alphabetString = [NSString stringWithUTF8String:s]; 

docpage

參數
          字節:字節的空終止的C數組採用UTF8編碼。

2

您無法將單個char值的地址傳遞到-stringWithUTF8String。該函數期望一個以空字符結尾的字符串,並且不會傳遞一個字符串。這導致未定義的行爲:任何事情都可能發生。它看起來可能會成功,它可能會失敗,或者它可能會擦除您的文件系統。但更有可能的是,它只會讓程序崩潰。

你應該創建一個兩字符數組是空值終止,而不是:

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]; 
+0

明白了,非常感謝! –

相關問題