Але що робити, якщо я хотів надрукувати рядок, скажімо printf ("привіт"), хоча я встановив, що це не закінчується на \ 0 наступним висловом
printf("%d", printf("hello"));
Output: 5
Ви неправі. Це твердження не підтверджує, що літеральний рядок "hello"
не закінчується символом завершення нулю '\0'
. Це твердження підтвердило, що функція printf
виводить елементи рядка, поки не зустрінеться символ завершення нуля.
Коли ви використовуєте літеральний рядок, як у викладі вище, компілятор створює масив символів зі статичною тривалістю зберігання, що містить елементи літерального рядка.
Так насправді це вираз
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;
}
Щоб отримати кількість символів, що зберігаються в прямому рядку "привіт", можна запустити наступну програму
#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
?