2009-10-04 149 views
0

我收到了iPhone SDK中的Object-C的characterAtIndex方法返回的一些奇怪的數字。代碼片段如下: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

新文本是一個局部變量,它不是initalized,你給它分配一個值之前將消息發送到它。與新分配的Objective-C對象不同,局部變量值不會自動爲零,因此new_text的指針值就是在方法執行之前發生的那個內存位置。換句話說,你的new_text指針指向一個非確定性的內存位置,因此這裏的行爲是不確定的,不可預知的。通常你最終會崩潰,但絕對有可能你指向的東西看起來像一個字符串,但該字符串的內容也是非確定性的。因此怪異的字符值。

n.b.這是一個很好的例子,說明爲什麼在聲明時始終初始化局部變量是一種很好的做法。

1

new_text是零當你發送stringByAppendingFormat到它。將消息發送給一個零對象是合法的 - 它什麼也不做。因此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等)。這些字符串方法將如何將這些值返回給我? – 2009-10-04 03:19:05

+0

字符串方法只是製作字符串。 characterAtIndex是什麼讓你的價值。嘗試NSLog(@「%d」,[@「A」characterAtIndex:0]); – nall 2009-10-04 03:26:53

+0

NSLog似乎對字符串中的前兩個字符起作用。第三個字符返回8656的值。它能返回一個地址而不是十進制值嗎? – 2009-10-04 03:41:18