Tetapi bagaimana jika saya ingin mencetak string, katakan printf ("halo") walaupun saya telah menemukan bahwa itu tidak berakhir dengan \ 0 dengan mengikuti pernyataan
printf("%d", printf("hello"));
Output: 5
Anda salah. Pernyataan ini tidak mengkonfirmasi bahwa string literal "hello"
tidak berakhir dengan karakter nol penghentian '\0'
. Pernyataan ini mengonfirmasi bahwa fungsi printf
menampilkan elemen string hingga karakter nol terminasi ditemukan.
Ketika Anda menggunakan string literal seperti dalam pernyataan di atas maka kompiler membuat array karakter dengan durasi penyimpanan statis yang berisi elemen string string.
Jadi sebenarnya ungkapan ini
printf("hello")
diproses oleh kompiler sesuatu seperti yang berikut ini
static char string_literal_hello[] = { 'h', 'e', 'l', 'l', 'o', '\0' };
printf( string_literal_hello );
Tindakan fungsi printf dalam hal ini dapat Anda bayangkan dengan cara berikut
int printf( const char *string_literal )
{
int result = 0;
for ( ; *string_literal != '\0'; ++string_literal )
{
putchar( *string_literal );
++result;
}
return result;
}
Untuk mendapatkan jumlah karakter yang tersimpan dalam string literal "halo" Anda dapat menjalankan program berikut
#include <stdio.h>
int main(void)
{
char literal[] = "hello";
printf( "The size of the literal \"%s\" is %zu\n", literal, sizeof( literal ) );
return 0;
}
Output program adalah
The size of the literal "hello" is 6
);
, apa yang ingin Anda tunjukkan dengan kode itu? Bagaimana Anda membuktikan bahwa itu tidak berakhir dengan\0
?