2013-01-17 4 views
0

iOS Xcode 프로젝트의 정적 C++ 라이브러리로 작업하면서 printf 및 Xcode LLDB 디버거로 이상한 동작을 만났습니다. 때로는 printf("%s", char*)의 인쇄 결과가 숫자 또는 문자로 연결된 문자였습니다. 쓰레기 문자. 첨부 된 이미지는 자체적으로 말합니다. 어떤 생각? 당신이 %s 형식 지정자로 인쇄하는 경우 필요 achar - LLDB 디버거를 인쇄 할 때 printf가 비정상적으로 작동합니다.

enter image description here

+2

코드의 텍스트 복사 및 붙여 넣기는 읽고 사용하기가 더 쉽습니다. –

답변

2

예상대로 작동하는 것 같다. %s은 NUL 종료 문자열을 필요로합니다. 즉, 주어진 char*의 경우 첫 번째 문자 인 '\0'까지 인쇄하십시오. 배열을 %s에 적합하게하려면 5 바이트를 할당하고 a[4]=0;을 할당해야합니다.

+0

* 모든 동작은 "예상대로"됩니다. 'printf ("% s", blah)'NUL 종료가 아닌 배열에 대한 포인터를 주면 동작은 정의되지 않습니다. –

+0

, 고마워! –

0

문자 배열은 '\0' 종료합니다 :

char * a = new char[5]; 

a[0] = 'i'; 
a[1] = 'p'; 
a[2] = 'o'; 
a[3] = 'd'; 
a[4] = '\0'; 

printf("word: %s\n", a); 
관련 문제