C: prekopirovanie retazca s určeným indexom

Programovacie jazyky, rady, poradňa...
milanbb55
Novice
Novice
Príspevky: 6
Registrovaný: 09 nov 2005, 7:45

C: prekopirovanie retazca s určeným indexom

Príspevok od používateľa milanbb55 »

zdravím, mam taky problem v céčku
mam dve premenné typu

Kód: Vybrať všetko

char pomchar[2], pomchar2[20];
kde chcem obsah pomchar prekopirovat na poziciu 16,17,18 pomcharu2

Kód: Vybrať všetko

for(i=16; i<19;i++) 
       strcpy(pomchar2[i],pomchar[i-16]);
takéto dačo nebere bohužial /padne to/.... ako by ste to pls vyriešili (hlavne efektívne :) ) diky
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

pomchar nie je krátke? (chceš tri znaky, ale v deklarácii máš iba dva)

Môžeš vyskúšať:

Kód: Vybrať všetko

for(i=16; i<19;i++)
	pomchar2[i] = pomchar[i-16];
// alebo
strncpy(&pomchar2[16], pomchar, 3);
V závislosti od toho, čo robíš sa to možno bude dať urobiť aj elegantnejšie (možno pomocou funkcie sprintf).
tuti
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 740
Registrovaný: 01 okt 2006, 19:23
Bydlisko: Prievidza

Príspevok od používateľa tuti »

v prvom rade sa to da robit cez pismenka. v tedy vyuzijes cyklus for a normalne priradovanie cez indexi.

v druhom rade sa to da robit pomocou strcpy a prikaz by vyzeral asi takto (je to pisane z hlavy):

Kód: Vybrať všetko

strcpy( &(pomchar2[16]), pomchar )
este vec v tom ukazovom priklade mas pomchar[2] a chces kopirovat 3 znaky :? a drobna pripomienka nezabudni ukoncit retazec \0 a pripadne vyuzit funkcie strncpy a nebudes musiet prekopirovavat tu koncovu nulu.
milanbb55
Novice
Novice
Príspevky: 6
Registrovaný: 09 nov 2005, 7:45

Príspevok od používateľa milanbb55 »

díky fungujú oba spôsoby :) len mi nejde do hlavy

Kód: Vybrať všetko

strcpy(&(pomchar2[16]), pomchar ) 
prečo je tam to & ked vlastne pomchar2 je sam o sebe adresa ... prečo sa to zhodi ked napisem:

Kód: Vybrať všetko

strcpy(pomchar2[16], pomchar ) 
ale zas

Kód: Vybrať všetko

strcpy(pomchar2, pomchar )
ide normalne len sa to neda robiť pomocou indexov
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

pomchar2 je adresa (a teda je to typ char*), ale pomchar[16] je typ char. Až pomocou & získaš adresu.

Tá konštrukcia strcpy(pomchar2[16], pomchar ) zhodí program preto, lebo sa ako prvý parameter očakáva adresa, ale vloží sa tam iba jeden znak (a to potom nie je správna adresa).
milanbb55
Novice
Novice
Príspevky: 6
Registrovaný: 09 nov 2005, 7:45

Príspevok od používateľa milanbb55 »

jasné už mi to je jasné diky moc :wink:
Napísať odpoveď