2011-10-17 4 views
0

정말 이상한 문제가 있습니다. 기본적으로 char를 nsstring으로 변환하고 nsmutable 배열에 저장합니다.NSString stringWithUTF8String은 장치에서 null을 반환하지만 시뮬레이터에서는 정상입니다.

하지만 코드는 시뮬레이터에서 정상적으로 실행되지만 장치에서는 충돌이 발생합니다. 여기

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. 
+0

이것으로 달성하려는 작업 : char t = 'A'+ i; 이것은 제가 의심하는 문제를 일으키는 곳입니다. 그런 다음 stringWithUTF8String 메서드에서 문자 lateral의 참조를 전달합니다. – UPT

답변

2

단일 char의 주소는하지 C 스타일 문자열 입니다. docpage에서

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

: 당신은이 널 (null)과 같은 종료있어 확인해야

매개 변수
          바이트 : 바이트의 NULL로 끝나는 C 배열 UTF8 인코딩.

2

당신은 -stringWithUTF8String 단일 char 값의 주소를 전달할 수 없습니다. 이 함수는 null로 끝나는 문자열을 기대하고 있으며, 전달하지 않습니다. 이로 인해 정의되지 않은 동작 : 아무 일도 일어나지 않을 수 있습니다. 성공하는 것처럼 보일 수 있으며, 정상적으로 실패하거나 파일 시스템이 지워질 수 있습니다. 그러나 더 많은 가능성이있어, 그것은 단지 당신의 프로그램을 망칠 것입니다.

당신의 두 문자 배열 만들어야 대신 널 (null)을 종료 :

NSString* alphabetString = [NSString stringWithFormat:@"%c", 'A' + i]; 
:

char t[2] = {'A' + i, 0}; // Two-character null-terminated array 
NSString* alphabetString = [NSString stringWithUTF8String:t]; 

또는, 당신은 또한 단일 문자를 포함하는 문자열을 얻기 위해 %c 형식 지정자로 -stringWithFormat:을 사용할 수 있습니다

+0

알았어, 고마워! –

관련 문제