/************************************************/
/* 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
*/