/************************************************/
/* soubor STR_CPY2.C				*/
/* ukazuje dve mozne implementace kopirovani	*/
/* retezcu, navic i vypis adres ukazatelu	*/
/************************************************/

#include <stdio.h>

#define	SIZE	80

void strcpy1(char *d, char *s)
{
 while ((*d++ = *s++) != '\0') ;
}

void strcpy2(char d[], char s[])
{
 int i = 0;
 while ((d[i] = s[i]) != '\0')
   i++;
}

int main()
{
 char s1[] = "prvni (1.) retezec",
      s2[] = "druhy (2.) retezec",
      d1[SIZE], d2[SIZE],
      *ps = s2;
 puts("\nmnemonika:"
	"\n\t\ts  - source"
	"\n\t\td  - destination"
	"\n\t\tps - pointer to string\n");
 printf("s1 %p\ts2 %p  = \tps%p\nd1 %p\td2 %p\n\n", s1, s2, ps, d1, d2);
 strcpy1(d1, s1);
 strcpy2(d2, s2 + 6);
 ps = s2 + 8;
 printf("s1[]:%s\t\ts2[]:%s\n\t\t *(s2 + 8) =\t *ps:%s\nd1[]:%s\t\td2[]:%s\n\n",
	s1, s2, ps, d1, d2);
 printf("s1 %p\ts2 %p  s2 + 8 = \tps %p\nd1 %p\td2 %p\n\n",
	s1, s2, ps, d1, d2);
 return 0;
}

/* output (BC 3.1 large memory model)
mnemonika:
		s  - source
		d  - destination
		ps - pointer to string

s1 1C70:0FE8	s2 1C70:0FD4  = 	ps1C70:0FD4
d1 1C70:0F84	d2 1C70:0F34

s1[]:prvni (1.) retezec		s2[]:druhy (2.) retezec
		 *(s2 + 8) =	 *ps:.) retezec
d1[]:prvni (1.) retezec		d2[]:(2.) retezec

s1 1C70:0FE8	s2 1C70:0FD4  s2 + 8 = 	ps 1C70:0FDC
d1 1C70:0F84	d2 1C70:0F34
*/