Kemungkinan penjelasan mas Eko benar... tapi saya menduga tidak diletakkannya awal[3] pada Data Segment, disebabkan karena adanya optimasi dari compiler yang mungkin diletakkan pada Stack Segment karena sifatnya hanya sementara, yaitu hanya digunakan dalam function main()...
Coba compile tanpa optimasi: gcc -Wall -O0 -o str1 str1.c dan lihat apakah hasilnya seperti yang diharapkan: ABCDE ??? On Thursday 04 May 2006 11:20, Eko Prasetya wrote: > Compiler tidak melakukan array bound checking pada waktu > suatu function dipanggil. > Lint mungkin bisa, but not compiler. > > One explanation, lucky! > char awal[3] menyimpan data-nya di BSS, sedangkan > char akhir[8] di DS, keduanya tidak berhubungan. > Lagipula, seandainya memang kedua-nya ada di segment memory yang sama, > strcpy() akan menambahkan '\0', yang basically menghapus WXZY dari > printf()= . > > > KOkon. > > On 5/3/06, Me Junk <[EMAIL PROTECTED]> wrote: > > Program1: > > ... > > char awal[3] = "ABCDE"; > > char akhir[8] = "WXZY"; > > > > int main () { > > printf("awal: %s\nakhir: %s\n", awal, akhir); > > return (0); > > } > > > > > > Program2: > > ... > > char awal[3]; > > char akhir[8] = "WXZY"; > > > > int main () { > > strcpy(awal, "ABCDE"); > > printf("awal: %s\nakhir: %s\n", awal, akhir); > > return (0); > > } > > > > Di compile dgn: gcc -Wall -ostr1 str1.c > > > > Mengapa pada program2 gcc tdk memberikan warning dan hasilnya benar? > > awal: ABCDE dan bukan ABCWXZY -- Danny Kurniawan -----BEGIN GEEK CODE BLOCK----- Version: 3.12 GCS/CM/E/IT d+() s+:+ a- C++>+++$ UL+++(++)>++++ P!(+++) L+++>++++>$ E-- W++>$ N o-- K- w--(+++) O++@ M@ V? PS PE-@ Y+ PGP@ t++ 5+@ X+++(++) R tv+ b +++(++) DI? D++@ G+>++ e++ h- r++ y z- ------END GEEK CODE BLOCK------ -- Berhenti langganan: [EMAIL PROTECTED] Arsip dan info: http://linux.or.id/milis