Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

problem sa karakterima

[es] :: C/C++ programiranje :: C/C++ za početnike :: problem sa karakterima

[ Pregleda: 3490 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

kish
NS

Član broj: 91320
Poruke: 44
195.252.85.*

ICQ: 204


Profil

icon problem sa karakterima03.10.2006. u 10:03 - pre 213 meseci
Ako imam:
char * c1;
char * c2;
char * c3;
Kako da dobijem c3 tako da bude spoj c1 i c2? Znam kako se to radi kod obicnih stringova (append) ali meni treba u ovom obliku.
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: problem sa karakterima03.10.2006. u 14:20 - pre 213 meseci
1) ako hoces da nadovezes c2 na c1 uradis ovako
strcat(c1,c2);

2) ako ti treba u posebnom stringu c3, onda prvo prekopiras
strcpy(c3,c1);
pa onda nadovezes
strcat(c3,c2)

Znaci sad je c3=c1+c2...
Mislim, šta reći !
 
Odgovor na temu

kish
NS

Član broj: 91320
Poruke: 44
195.252.85.*

ICQ: 204


Profil

icon Re: problem sa karakterima04.10.2006. u 19:44 - pre 213 meseci
Hvala...
 
Odgovor na temu

kish
NS

Član broj: 91320
Poruke: 44
*.beotel.net.

ICQ: 204


Profil

icon Re: problem sa karakterima08.10.2006. u 19:27 - pre 213 meseci
JBT, NE RADI!!! Si ti probao ovo da iskompajliras? Meni javlja gresku!!!
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: problem sa karakterima08.10.2006. u 20:41 - pre 213 meseci
Kopiraj kod pa da vidimo.
Mislim, šta reći !
 
Odgovor na temu

kish
NS

Član broj: 91320
Poruke: 44
*.beotel.net.

ICQ: 204


Profil

icon Re: problem sa karakterima09.10.2006. u 15:50 - pre 213 meseci
Code:

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;

char * c1;
char * c2;

int main()
{
    c1="prvi";
    c2="drugi";
    strcat(c1,c2);

    cout<<c1<<endl;

    return 0;
}


Kad stigne do strcat program se prekida, javlja se greska i nista...Don't send...
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: problem sa karakterima09.10.2006. u 16:13 - pre 213 meseci
Nemozes ovako deklarisati:
char * c1;
char * c2;

Mora kompajler znati kolike su duzine, ili ovako kao sto sam ja u kodu,
ili da navedes neki maksimum pa kasnije da uneses, recimo char c1[23].

Probaj ovako klosarski, kod mene radi :) .
Kod mene bez tog exit odradi ali prijavi gresku, iz ne znam kog razloga.

Code:
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;

int main()
{
    char c1[]="prvi";
    char c2[]="drugi";
    strcat(c1,c2);

    cout<<c1<<endl;

    exit(1);

    return 0;
}

Mislim, šta reći !
 
Odgovor na temu

kish
NS

Član broj: 91320
Poruke: 44
*.beotel.net.

ICQ: 204


Profil

icon Re: problem sa karakterima09.10.2006. u 18:56 - pre 213 meseci
Sada je cool...samo mi nista ne vredi zbog onog "exit"...
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: problem sa karakterima09.10.2006. u 19:05 - pre 213 meseci
Kako ne vredi, normalno napravi program samo na kraju stavi taj exit.
Zaista ne znam zasto to radi, probao sam bez std-a, sa printf, i sa puts,
svasta sam pokusavao, ali samo ovako radi.
Mislim, šta reći !
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
65.213.80.*



+6 Profil

icon Re: problem sa karakterima09.10.2006. u 19:24 - pre 213 meseci
To dovodi do segfault-a iliti na Winu do access violation-a. Razlog je što prvi string treba da ima dovoljno alociranog prostora da primi novi "spojen" string.

Uglavnom, najozbiljnije savetujem da koristite ovako nešto:

Code:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    string c1 = "prvi";
    string c2 = "drugi";
    c1.append(c2);

    cout<<c1<<endl;

    return 0;
}



 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: problem sa karakterima09.10.2006. u 21:07 - pre 213 meseci
Citat:

Znam kako se to radi kod obicnih stringova (append) ali meni treba u ovom obliku.

Mislim, šta reći !
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
*.hsd1.ma.comcast.net.



+6 Profil

icon Re: problem sa karakterima10.10.2006. u 00:43 - pre 213 meseci
E, onda mora nešto ovako (iz glave):

Code:

char* c1 = "prvi";
char* c2 = "drugi";

char* c3 = new char[strlen(c1) + strlen(c2) +1];
strcpy(c3, c1);
strcat(c3, c2);

cout << c3;

delete[] c3;


mada je potpuno besmisleno pisati takav kod.
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.medianis.net.



Profil

icon Re: problem sa karakterima10.10.2006. u 01:03 - pre 213 meseci
Citat:
kish:
Code:

#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;

char * c1;
char * c2;

int main()
{
c1="prvi";
c2="drugi";
strcat(c1,c2);

cout<<c1<<endl;

return 0;
}


Kad stigne do strcat program se prekida, javlja se greska i nista...Don't send...

Linija
Code:
c1="prvi";
rezervise 5 bajta memorije (1 znak je jedan bajt dakle 4 bajta, plus jos jedan bajt za 0, sto zahtevaju mnoge funkcije za rad sa nizovima karaktera - stringovima),

Code:
c2="drugi";
rezervise 6 bajta memorije,

Code:
strcat(c1,c2);
funkcija strcat() fokusava da ceo niz c2 od 5 bajta (0 ce se samo dodati umesto vec postojeceg u c1 na kraju tako da se ne racuna) smesti iza slova 'i' u c1.

Znaci potrebno je da c1 ima rezervisano 10 bajta memorije (4 za rec "prvi", 5 za rec "drugi" i 1 za 0 terminirajuci znak), ali c1 je rezervisao samo 5 bajta memorije, sto znaci da ce funkcija da pokusa da pise "iza" memorije koja je rezervisana za c1, tj. u eventualno tudjoj memoriji, sto ce izazvati gresku/izuzetak - Segmentation fault.

Iz objasnjenja za funkciju strcat() izmedju ostalog pise:
Citat:
The strings may not overlap, and the dest string must have enough space for the result.


Ako hoces da ovo uradis u tzv. C++ maniru onda koristi klasu std::string u suprotnom (ako ti treba u tom obliku) moras da obezbedis dovoljno memorije u _odredisnom_ nizu. Npr.
Code:
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;

char * c1;
char * c2;

int main()
{
   c1="prvi";
   c2="drugi";
   char buf[strlen(c1)+strlen(c2)+1];

   strncpy(buf, c1, strlen(c1)+1); // broju koji vrati "strlen()" dodaj jos 1 da bi kopirao i 0 iz "c1"
   strcat(buf,c2);

   cout<<buf<<endl;
}
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.medianis.net.



Profil

icon Re: problem sa karakterima10.10.2006. u 01:07 - pre 213 meseci
Dok sam pisao poruku, ne videh. Na dobar deo pitanja je vec odgovoreno.
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: problem sa karakterima10.10.2006. u 10:13 - pre 213 meseci
Sad mi je jasno zasto, ali...
kad sam isprobavao, naisao sam na slucaj da ako drugi string ima isto ili manje
znakova od prvog, onda uradi normalno bez greske, sto je cudno.

Code:

#include <stdio.h>
#include <string.h>

int main()
{
    char c1[]={'p','r','v','i','\0'};
    char c2[]={'d','r','u','\0'};

    strcat(c1,c2);

    printf("%s",c1);
    
    return 0;
}


[Ovu poruku je menjao android~paranoid dana 10.10.2006. u 11:34 GMT+1]
Mislim, šta reći !
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: problem sa karakterima10.10.2006. u 10:33 - pre 213 meseci
Citat:
Milan Aksic
char buf[strlen(c1)+strlen(c2)+1];



Mora da se navede broj (konstanta) kaze kompajler, znaci mora dinamicki da se dodeli memorija, kao sto je Dragi Tata uradio.
Mislim, šta reći !
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
65.213.80.*



+6 Profil

icon Re: problem sa karakterima10.10.2006. u 12:51 - pre 213 meseci
Citat:
android~paranoid: Mora da se navede broj (konstanta) kaze kompajler, znaci mora dinamicki da se dodeli memorija, kao sto je Dragi Tata uradio.


Mislim da Milan koristi gcc koji ima ovu C99 ekstenziju, ali si u pravu. C++ ne dozvoljava takve konstrukcije.
 
Odgovor na temu

Milan Aksic

Član broj: 412
Poruke: 1053
*.medianis.net.



Profil

icon Re: problem sa karakterima10.10.2006. u 22:11 - pre 213 meseci
Citat:
android~paranoid: Mora da se navede broj (konstanta) kaze kompajler, znaci mora dinamicki da se dodeli memorija, kao sto je Dragi Tata uradio.
Da, moj previd, izvinjavam se.
Neka me Nemanja ispravi ili dopuni ali kako je niz samo konsantni pokazivac, broj za rezervisanje memorije mora biti konstantan, tj. poznat za vreme prevodjenja a ne tokom izvrsavanja programa (strlen() funkcija se poziva tokom izvrsavanja).
Citat:
Dragi Tata: Mislim da Milan koristi gcc koji ima ovu C99 ekstenziju, ali si u pravu. C++ ne dozvoljava takve konstrukcije.
Eh, nisam ni prevodio onaj gore program, vec sam ga napisao dok sam odgovarao, bez proveravanja :)
Ipak, gcc prijavljuje gresku tek sa -pedantic opcijom:
milaks:~/test
$ g++ -o bla bla.cpp -pedantic
bla.cpp: In function ‘int main()’:
bla.cpp:14: error: ISO C++ forbids variable-size array ‘buf’
 
Odgovor na temu

android~paranoid

Član broj: 81947
Poruke: 211
*.041net.co.yu.



Profil

icon Re: problem sa karakterima10.10.2006. u 23:09 - pre 213 meseci
Citat:
Milan Aksic: Neka me Nemanja ispravi ili dopuni ali kako je niz samo konsantni pokazivac, broj za rezervisanje memorije mora biti konstantan, tj. poznat za vreme prevodjenja a ne tokom izvrsavanja programa (strlen() funkcija se poziva tokom izvrsavanja).


Tacno tako, jos bih dodao da se pri prenosu matrice u f-ju mora znati broj kolona (nemora br. redova) uravo da bi kompajler znao koliko memorije da rezervise.

Mislim, šta reći !
 
Odgovor na temu

[es] :: C/C++ programiranje :: C/C++ za početnike :: problem sa karakterima

[ Pregleda: 3490 | Odgovora: 18 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.