home *** CD-ROM | disk | FTP | other *** search
- // 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;
- }
-