C: pristup ku znakom z retazca
potreboval by som mensiu pomoc (zaciatocnik).
mam definovany retazec napr. :
char* retazec = "linuxos";
problem mam v pristupe ku znakom. V knizke pisu, ze k nim mozem pristupovat ako ku polu (co som si aj ja myslel) --> retazec[4], ale kompilatoru sa to nepaci (pise iba RUN FAILED). Tak som skusal ziskat znak takto &retazec[4]. Program sa spusti, no vo vystupe je ten retazec len posunuty o 4 bity: "xos"
Otazka: Ako ziskam 4. znak retazca: "u"? Poprosim s vysvetlenim.
Dakujem
Pre pridávanie komentárov sa musíte prihlásiť.
chyba bude v tom, ako sa ten znak snazis vypisovat:
printf("%c\n", retazec[3]);
vypise 'u'
ty pravdepodobne pouzivas %s
Mám taký ten pocit, že kompilátor ti to ani neskompiluje pretože to má byť takto:
const char* retazec = "linuxos";
alebo takto keď už tak:
char* retazec = new char[8];
strcpy(retazec,"linuxos");
ehm? :)
na char *retazec = "linuxos"; nie je nic zle.
ale priklanam sa k tomu, ze by sme potrebovali vidiet cely zdrojak.
Čo ja viem, ja by som to nerobil. nech sa chlapec naučí programovať tak ako sa to má. Za prvé, nemám rád warningy pri kompilácii, za druhé ak sa niekde v programe pokúsi uvoľniť to miesto, padne program.
char *retazec = "linuxos";
-negeneruje warning
-ze spadne program pri pokuse o free() je spravne
-cele je to uplne spravne
inak
char retazec[8];
strcpy();
kedze retazec bude na zasobniku, tak ten program pravdepodobne pri free() spadne tiez.
Preco to "cele spravne" urcite nie je:
ok, teraz by bolo dobre definovat "uplne spravne" :) povodny dotaz nehovoril nic o zapise do toho stringu, mal sa iba vypisovat. v tomto pripade, ked je "linuxos" v datovom (textovom? podla size) segmente, tak do toho asi len tak zapisovat nepojde. ale s tym sa pocita, stale na tom postupe nevidim nic zle :)
char retazec[8];
tu si myslim, ze to na zasobniku bude.