그러나 문자열을 인쇄하려면 printf ( "hello")라고 말하십시오. 다음 명령문으로 \ 0으로 끝나지 않는다는 것을 알았습니다.
printf("%d", printf("hello"));
Output: 5
당신은 잘못. 이 문은 문자열 리터럴 "hello"
이 끝나는 0 문자로 끝나지 않는다는 것을 확인 하지 않습니다 '\0'
. 이 명령문 printf
은 종료 0 문자가 나타날 때까지 함수 가 문자열의 요소를 출력 함을 확인했습니다 .
위의 명령문에서와 같이 문자열 리터럴을 사용하는 경우 컴파일러는 문자열 리터럴의 요소를 포함하는 정적 저장 기간을 갖는 문자 배열을 작성합니다.
사실이 표현은
printf("hello")
다음과 같은 컴파일러에 의해 처리됩니다.
static char string_literal_hello[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
printf( string_literal_hello );
이 함수의 printf 동작은 다음과 같이 상상할 수 있습니다.
int printf( const char *string_literal )
{
int result = 0;
for ( ; *string_literal != '\0'; ++string_literal )
{
putchar( *string_literal );
++result;
}
return result;
}
문자열 리터럴 "hello"에 저장된 문자 수를 얻으려면 다음 프로그램을 실행할 수 있습니다.
#include <stdio.h>
int main(void)
{
char literal[] = "hello";
printf( "The size of the literal \"%s\" is %zu\n", literal, sizeof( literal ) );
return 0;
}
프로그램 출력은
The size of the literal "hello" is 6
);
무엇을 보여 주려고합니까? 그것으로 끝나지 않는다는 것을 어떻게 증명\0
했습니까?