Ama bir dize yazdırmak istersem, şu ifadeyi izleyerek \ 0 ile bitmediğini fark etsem de printf ("merhaba") deyin
printf("%d", printf("hello"));
Output: 5
Hatalısınız. Bu ifade, dize değişmezinin "hello"
sonlanan sıfır karakteriyle bitmediğini doğrulamaz '\0'
. Bu deyim, işlevin printf
sonlu sıfır karakteri ile karşılaşılana kadar bir dizenin öğelerini verdiğini doğrular .
Yukarıdaki ifadede olduğu gibi bir dize değişmezi kullandığınızda, derleyici, değişmez dize öğelerini içeren statik depolama süresine sahip bir karakter dizisi oluşturur.
Aslında bu ifade
printf("hello")
derleyici tarafından aşağıdaki gibi işlenir
static char string_literal_hello[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
printf( string_literal_hello );
Printf fonksiyonunun bu eylemini aşağıdaki şekilde hayal edebilirsiniz
int printf( const char *string_literal )
{
int result = 0;
for ( ; *string_literal != '\0'; ++string_literal )
{
putchar( *string_literal );
++result;
}
return result;
}
Değişken "merhaba" dizesinde saklanan karakter sayısını almak için aşağıdaki programı çalıştırabilirsiniz
#include <stdio.h>
int main(void)
{
char literal[] = "hello";
printf( "The size of the literal \"%s\" is %zu\n", literal, sizeof( literal ) );
return 0;
}
Program çıktısı
The size of the literal "hello" is 6
);
ne göstermeyi düşünüyorsunuz? Bunun bir ile bitmediğini nasıl kanıtladınız\0
?