2013-06-14 11 views
0

В настоящее время я работаю над приложением iOS, в котором мне нужно преобразовать NSString в char *. Для этого я использовал следующий код:strlen() дает неправильный результат

NSString *str = @"Hello ! How Are You ???"; 
char *as = (char *)[[str dataUsingEncoding:NSUTF8StringEncoding] bytes]; 
int a = strlen(as); 
NSLog(@"Length using: -length : [%d]",[str length]); 
NSLog(@"Length using: strlen() : [%d]",a); 

Но проблема в том, что у меня разные длины.

Выход:

Length using: -length : [23] 
Length using: strlen() : [33] 

Я проверил его снова и снова. Но иногда я получаю правильный вывод. Но большую часть времени я получил неправильный результат.

В чем проблема? Есть ли ошибка в моем коде?

Пожалуйста, помогите мне, спасибо заранее

+1

В дополнение к причине, указанной в ответе, обратите внимание, что две длины будут равны, если строка содержит символы ASCII в диапазоне 1-127. – rmaddy

ответ

2

Похоже dataUsingEncoding: не включает в себя «\ 0» в конце и StrLen опирается на него. вместо этого используйте char *as = (char *)[str cStringUsingEncoding:NSUTF8StringEncoding];. он дает правильные результаты.

+1

Еще проще: 'char * as = [str UTF8String]'. –

+0

@MartinR: Спасибо за комментарий. –

+0

Спасибо за ответ, хотя я и не понял. Он исправил мою проблему :) –

Смежные вопросы