2009-10-04 5 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]; 
} 

개별 문자의 10 진수를 얻으려고합니다. 나는 매번 잘못된 값을 얻고있다. 때때로 값은 8,000보다 큽니다! 번호 65 ~ 71을 돌려 주어야합니다. stringByAppendingFormat을 보내면

답변

1

새 _ 텍스트는이 initalized 아니에요, 지역 변수, 당신은 여기에 값을 할당하기 전에 메시지를 보낼 수 있습니다. 새로 할당 된 Objective-C 객체와 달리 로컬 변수 값은 자동으로 0이 아니므로 new_text의 포인터 값은 메서드가 실행되기 전에 발생한 메모리 위치가됩니다. 즉, new_text 포인터가 비 결정적 메모리 위치를 가리키고 있으므로 여기의 동작은 정의되지 않고 예측할 수 없습니다. 일반적으로 충돌을 일으킬 수는 있지만, 문자열과 비슷한 모양을 가리키고 있지만 그 문자열의 내용도 비 결정적입니다. 따라서 괴상한 문자 값.

n.b. 로컬 변수를 선언 할 때 항상 초기화하는 것이 좋은 습관의 좋은 예입니다.

1

new_text은 0이 아닙니다. 무제한 객체에 메시지를 보내는 것은 합법적입니다. 아무 것도하지 않습니다. 따라서 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 등)에 대해 10 진수 값을 얻으려고합니다. 이 문자열 메소드는 어떻게 저 값을 돌려 줄까요? –

+0

문자열 메서드는 단순히 문자열을 만듭니다. characterAtIndex는 값을 가져옵니다. NSLog (@ "% d", [@ "A"characterAtIndex : 0])를 시도하십시오. – nall

+0

NSLog는 문자열의 처음 두 문자에서 작동하는 것 같습니다. 세 번째 문자 하나가 8656의 값을 반환했습니다. 10 진수 값 대신 주소를 반환 할 수 있습니까? –

관련 문제