home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 March
/
Chip_2002-03_cd1.bin
/
chplus
/
cecko
/
CPP
/
RETEZCE.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1998-10-05
|
2KB
|
47 lines
// P⌐íklad: Programování v C++ na FJFI - ÇVUT
#pragma hdrfile="TCDEF.SYM" // pro urychlení p⌐ekladu
#include <iostream.h>
void strcpy(char *dest,char *src) {
while (*dest++=*src++); //p⌐edpokládáme, æe v dest bude dost volného místa
} /*Toto je zápis, jak jednoduché, av¿ak pro programátora v Pascalu asi to není moc z⌐ejmé, ale v C++ se je¿tê asi setkáte s ménê jasnÿmi vêcmi,
takæe si to vysvêtlíme, proç to funguje tak, jak to funguje.
Ukazatelé dest a src nechƒ ukazují na první znak ⌐etêzce. P⌐edpokládáme, æe dest ukazuje na ⌐etêzec s hodnê dlouhÿ.
*dest=*src by znamenalo, æe by se p⌐enesl jeden znak, z místa odkud ukazuje
src do místa, kam ukazuje dest. Vÿsledkem tohoto p⌐i⌐azení je hodnota, podle
toho, jakÿ znak se p⌐enesl. Asi uæ víme, æe na konci zdrojového ⌐etêzce se
p⌐edpokládá nula, potom bude vÿsledkem p⌐i⌐azení 0 a cyklus while skonçí.
Ale my si p⌐ejeme p⌐enést dal¿í znak, proto musíme pouæít ++, abychom se
dostali na dal¿í znak ve zdrojovém a cílovém ⌐etêzci. Takæe to tak funguje.
A na závêr, kompilátor oznámí Possibly incorrect assigment, coæ je zde
oprávnêné, zde máme skuteçnê na mysli p⌐i⌐azení a takæe je to v po⌐ádku.*/
char* Strcpy(char *dest, char *src) {
int i=0;
do {
dest[i] = src[i];i++;
} while (!dest[i]);
return dest;
}
char *c = "AHOJ";
char *d = c;
char novy[50];
char novy2[50];
void main() {
cout << "Start programu:" << endl;
cout << c << endl;
cout << d << endl;
d[1]='X'; //tvrdím, æe zmêna se projeví v obou ⌐etêzcích, protoæe c i d ukazují na stejné místo v pamêti
cout << c << endl;
cout << d << endl;
c = "Novy test";
strcpy(novy,c);
c[1]='X'; //nyní se jiæ zmêna neprojeví, novy zûstana beze zmêny
cout << novy << endl;
c = "Posledni test";
cout << Strcpy(novy2,c) << endl; //volá se jiná funkce
c[1]='X'; //nyní se také zmêna neprojeví, novy2 zûstana beze zmêny
cout << novy2 << endl;
cout << "Konec programu:" << endl;
}