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

Kirim email ke