/* primer22.c - kopiranje niske karaktera */ #include void copy1( char [], char [] ); void copy2( char [], char [] ); void copy3( char *, char * ); void copy4( char *, char * ); main() { char dd[15] = "Dobro jutro"; char dd1[15]={'D','o','b','a','r',' ','d','a','n'}; char dd2[15] = "Dobro vece"; char dd3[100]; char k; /* 1. nacin */ printf("%s %s\n", dd1, dd ); copy1( dd, dd1 ); printf("%s %s\n", dd1, dd ); /* 2. nacin */ printf("%s %s\n", dd1, dd2 ); copy2( dd1, dd2 ); printf("%s %s\n", dd1, dd2 ); /* 3. nacin */ printf("%s %s\n", dd , dd2 ); copy3( dd, dd2 ); printf("%s %s\n", dd , dd2 ); /* 4. nacin */ printf("%s %s\n", dd3 , dd ); //OPASNO - dd3 nije inicijalizovan copy3( dd3, dd ); printf("%s %s\n", dd3 , dd ); } void copy1( char s[], char t[] ) { int i; /* Kopiramo nisku t u nisku s */ i = 0; while( t[i] != '\0' ) { s[i] = t[i]; i = i + 1; } s[i] = '\0'; } void copy2( char s[], char t[] ) { int i = 0; while( s[i] = t[i] ) i++; } void copy3( char s[], char t[] ) { int i = 0; while( *(s + i) = *(t + i) ) i++; } void copy4( char *s, char *t ) { while( *s++ = *t++); } /* Napomene: (1) s[i] se izracunava kao *(s + i ) * (2) Marker kraja niske je vazan u primerima 2, 3, 4, * jer kada se iskopira \0 onda izraz dobija vrednost 0 i * petlja se zavrsava. naime, while( *s++ = *t++) je svedeni oblik za * while( (*s++ = *t++) != '\0') isl. * (3) Argument u koji se kopira mora biti dovoljne duzine! * Ako promenimo dd3 u dd3[5] copy ce izbristai ono sto se u * memoriji nalazilo oz dd3 (ma sta to bilo!!! */