2016-07-23 4 views
-1

왜이 프로그램이 4 대신 4 %를 인쇄하고 있습니까? 모든왜이 C 프로그램은 10 진수 값 뒤에 %를 인쇄합니까?

#include <stdio.h> 
int main() { 
    printf("%lu", sizeof(int)); 
    return 0; 
} 
+8

당신은 %'쉘하지만 프로그램이 아닙니다 '인쇄 무엇 확실합니까? 그렇다면 틀린 타입의 데이터를'printf()'에 전달하여 * 정의되지 않은 동작 *을 호출했기 때문입니다. 'sizeof' 연산자에서 반환되는'size_t'를 출력하는 올바른 형식은'% zu'입니다. – MikeCAT

+3

쉘이 C 쉘인 것 –

+2

숫자 다음에'\ n'을 넣어 쉘이 다음 라인으로 이동하게합니다 (쉘이'%'문자를 출력하는 것으로 가정하십시오). – Cornstalks

답변

1

우선, sizeof 연산자 size_t 유형의 결과를 산출한다. 결과를 인쇄하려면 %zu 형식 지정자를 사용해야합니다.

잘못된 형식 지정자 (형식 지정자와 일치하지 않는 인수)를 사용하면 undefined behavior이 호출됩니다.

당신은 당신이 당신이을 볼 출력, 후 즉시을 쉘 프롬프트 을 다시받을 일이 있도록 줄 바꿈는, 출력 후 인쇄 할 필요가 없었어요, 말했다.

+0

과 downvote에 대한 이유, 누구? –

1

이 프로그램은 4 만 인쇄합니다.

이후에 셸 프롬프트 (%)가 표시 될 수 있습니다.

이상적으로는

printf("%zu\n", sizeof(int));//zu is the right format specifier for object of type size_t 

주 있었어야 나는 다음 줄에 쉘 프롬프트를 얻을 수있는 \n을 뒀다.