2009-10-04 4 views
0

Я получаю некоторые странные числа, возвращаемые методом characterAtIndex для Object-C в iPhone SDK. Этот фрагмент кода выглядит следующим образом:characterAtIndex, возвращающий плохие значения

NSString *new_text; 
new_text = [new_text stringByAppendingFormat:@"%@",UITextView_1.text];//=a,b,...f 

for(int i = 0; i <= 6; i++) 
{ 
    char_num = [new_text characterAtIndex:i]; 
} 

Я пытаюсь получить десятичное число для отдельного символа. Я либо получаю неправильное значение каждый раз. Иногда значение больше 8000! Я должен возвращать число от 65 до 71.

ответ

1

new_text является локальной переменной, это не initalized, и отправить сообщение к нему, прежде чем присваивать ему значение. В отличие от объектов allocive Object Object-C, локальные значения переменных не всегда равны нулю, поэтому значение указателя new_text - это то, что оказалось для этого места памяти до выполнения метода. Другими словами, ваш указатель new_text указывает на недетерминированное расположение памяти, поэтому поведение здесь неопределенное и непредсказуемое. Обычно вы терпите крах, но, по большому счету, вы указываете на то, что выглядит как строка, но содержимое этой строки также не детерминировано. Отсюда странные значения символов.

n.b. Это отличный пример того, почему хорошая практика всегда инициализировать локальные переменные при их объявлении.

1

new_text nil, когда вы отправляете stringByAppendingFormat. Законно отправлять сообщение объекту nil - он просто ничего не делает. Таким образом, new_text никогда не инициализируется, следовательно, странные значения.

если new_text был инициализирован NSMutableString ваш код будет нормально:

// stringByAppendingFormat is an instance method and must be called on a non-nil instance 
NSMutableString* text = [NSMutableString string]; 
text = [text stringByAppendingFormat:@"%@",UITextView_1.text]; 

// stringWithFormat is a class method and can be used to initialize an instance 
NSString* text = [NSString stringWithFormat:@"%@",UITextView_1.text]; 
+0

Но я пытаюсь получить десятичное значение для каждого символа (A = 65, B = 66 и т. Д.). Как эти струнные методы вернут мне эти значения? –

+0

Строковые методы просто создают строку. CharacterAtIndex - это то, что дает вам значения. попробуйте NSLog (@ "% d", [@ "A" characterAtIndex: 0]); – nall

+0

NSLog, похоже, работает с первыми двумя символами в строке. Третий символ возвращал значение 8656. Может ли он возвращать адрес вместо десятичного значения? –

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