NSString stringWithUTF8String возвращает ноль на устройстве, но нормально на симуляторе - PullRequest
0 голосов
/ 17 октября 2011

У меня действительно странная проблема.По сути, просто преобразуйте символ в 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 ]

2 голосов
/ 17 октября 2011

Вы не можете передать адрес одного 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];
2 голосов
/ 17 октября 2011

Адрес одной char является , а не строкой в ​​стиле C.Вы должны убедиться, что значение NULL завершено, например:

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

На странице :

Параметры
байтов : массив байтов C с нулевым символом в конце в кодировке UTF8.

...