2012-07-15 2 views
0
const char *string ="Hi there,this is a C string"; 
NSData *data=[NSData dataWithBytes:string 
          length:strlen(string)+1]; 
NSLog(@"data is %@",data); 
NSLog(@"%lu byte string is '%s'",[data length],[data bytes]); 

이것은 암시 될 수 있습니다. 마지막 문장 인 경우 :NSLog in Objective-C에 관하여

NSLog(@"%d byte string is '%s'",[data length],[data bytes]); 

는 그 변환이 'INT'를 입력 지정 경고하지만 인수는

%d 수 없어 ('긴 aka'usigned)'NSUInteger '입력있다?

+0

http://stackoverflow.com/a/6727693/944634 –

답변

2

NSUInteger는 기본적으로 부호없는 long이므로 % lu를 대신 사용하십시오.

+0

을 보시고 '% d'은 질문 할 수 없습니다. 교과서에서 썼습니다. –

+1

당신이 읽고있는 교과서는 모르지만 ObjC에서는 형식 지정자에 올바른 "long/short"와 "signed/unsigned"를 전달해야합니다. % lu는 정확합니다 (긴 부호 없음). % d (짧은 기호)는 없습니다. –

+0

대답 해 주셔서 감사합니다. 아마도 교과서가 개선되거나 번역가가되어야 할 것입니다. 감사합니다! –

0

% d는 'int'를 의미합니다. NSUInteger는 'int'가 아니므로 % d이 (가) 작동하지 않습니다. 형식 지정자를 유형과 일치시켜야합니다. 잘못된 유형을 지정하면 프로그램이 충돌하거나 더 많은 가능성이있어 가비지가 인쇄됩니다.

+0

두 배로 % d을 (를) 사용할 수 없습니까? – TheAmateurProgrammer

+0

ur에 대한 설명은 –

+0

% d은 int에 대한 설명입니다. 복식의 경우 % f. 모든 지정자는 https://developer.apple.com/library/mac/ipad/#documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html에 문서화되어 있습니다. –