Ĺadny brzuch
Jak zrobic lancuch znakow ze zmiennej integer i fragmentu tekstu;
char* tekst;
int k =11;
chcialbym uzyskac "11Cos"
Probowalem tak:
tekst = IntToStr(k).c_str();
strcpy( tekst, "Cos" );
ale nie dziala i nie wiem dlaczego tzn wychodzi mi tylko "Cos"
Bardzo prosze o pomoc w napisaniu prawidlowego kodu.
int k = 11;
cout << k << "Cos" ;
O to chodziło?
______________________
Najprostrzym sposobem uzyskania takiego tekstu jest użycie klasy string (na moje oko taki właśnie obiekt jest zwracany przez IntToStr):
std::string tekst; //wynikowy tekst
int k = 11;
tekst += IntToStr(k); //dodajemy inta
tekst += "Cos"; //dodajemy tekst
Borland Buildera za dobrze nie znam, ale to są standardy C++, więc jeśli możesz includować header <iostream> albo <string>, to klasa string biblioteki standardowej musi być.
Twoja metoda z strcpy nie działa, ponieważ nadpisujesz w niej tekst, zamiast dopisać nowy. Jeśli zapisać tekst 11 zgodnie z układem w pamięci:
[1] [1] [NULL]
to po strcpy zamiast:
[1][1][C][o][s][NULL]
dostajesz:
[C][o][s][NULL]
Chodzi o to, że strcpy nadpisuje od początku, nie dodaje.
//================================================
KĄESACP: Komputer Ąwiat - Expert Society Against Crap Posting
To join: Put these lines in your signature and don't post crap!
"E = mc... dolen taken my notepad!" - Terran Science Vessel (StarCraft)
GG: 1488052 | temporal@poczta.fm | [url]http://www.temporal-software.prv.pl
Pozatym robsz kardynalny błąd, zapisujesz ten swój tekst w zasadzie nie wiadomo gdzie. Zmienna tekst to tylko goły wskaznik, któremu nie przydzieliłes zadnej konkretnej pamięci/zasobu. Chwilowo tylko pokazałeś na coś co zwróci IntToStr(k).c_str() i tyle, nie wiedząc nawet jaki rozmiar pamięci masz do rozdysponowania. Tak nie można, nie masz pewności czy to co za chwile będziesz kopiował pozostanie we właściwym obszarze pamięci czy nnie naruszy przestrzeni adresowej innego zasobu (i w tym przypadku jest to bardz realne). Po pierwsze trzeba sobie zarezerwowac/zaalokowac jakąś pamięć, nie ważne czy dynamicznie czy nie ale trzeba to zrobić a dopiero potem tam mozesz coś kopiować cały czas nadzorując czy kopiowane dane nie przekroczą rozmiaru zaalokowanej pamięci.
Druga spraw to ze jeśli chcesz doklejać tekst to skorzystaj z funkcji strcat.
char tekst[80]=""; int k=11; strcpy(tekst,IntToStr(k).c_str()); //mozna uzyc strcat strcat(tekst,"Cos");
KoDo
GG:3857769
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
char* tekst;
int k =11;
chcialbym uzyskac "11Cos"
Probowalem tak:
tekst = IntToStr(k).c_str();
strcpy( tekst, "Cos" );
ale nie dziala i nie wiem dlaczego tzn wychodzi mi tylko "Cos"
Bardzo prosze o pomoc w napisaniu prawidlowego kodu.
int k = 11;
cout << k << "Cos" ;
O to chodziło?
______________________
Najprostrzym sposobem uzyskania takiego tekstu jest użycie klasy string (na moje oko taki właśnie obiekt jest zwracany przez IntToStr):
std::string tekst; //wynikowy tekst
int k = 11;
tekst += IntToStr(k); //dodajemy inta
tekst += "Cos"; //dodajemy tekst
Borland Buildera za dobrze nie znam, ale to są standardy C++, więc jeśli możesz includować header <iostream> albo <string>, to klasa string biblioteki standardowej musi być.
Twoja metoda z strcpy nie działa, ponieważ nadpisujesz w niej tekst, zamiast dopisać nowy. Jeśli zapisać tekst 11 zgodnie z układem w pamięci:
[1] [1] [NULL]
to po strcpy zamiast:
[1][1][C][o][s][NULL]
dostajesz:
[C][o][s][NULL]
Chodzi o to, że strcpy nadpisuje od początku, nie dodaje.
//================================================
KĄESACP: Komputer Ąwiat - Expert Society Against Crap Posting
To join: Put these lines in your signature and don't post crap!
"E = mc... dolen taken my notepad!" - Terran Science Vessel (StarCraft)
GG: 1488052 | temporal@poczta.fm | [url]http://www.temporal-software.prv.pl
Pozatym robsz kardynalny błąd, zapisujesz ten swój tekst w zasadzie nie wiadomo gdzie. Zmienna tekst to tylko goły wskaznik, któremu nie przydzieliłes zadnej konkretnej pamięci/zasobu. Chwilowo tylko pokazałeś na coś co zwróci IntToStr(k).c_str() i tyle, nie wiedząc nawet jaki rozmiar pamięci masz do rozdysponowania. Tak nie można, nie masz pewności czy to co za chwile będziesz kopiował pozostanie we właściwym obszarze pamięci czy nnie naruszy przestrzeni adresowej innego zasobu (i w tym przypadku jest to bardz realne). Po pierwsze trzeba sobie zarezerwowac/zaalokowac jakąś pamięć, nie ważne czy dynamicznie czy nie ale trzeba to zrobić a dopiero potem tam mozesz coś kopiować cały czas nadzorując czy kopiowane dane nie przekroczą rozmiaru zaalokowanej pamięci.
Druga spraw to ze jeśli chcesz doklejać tekst to skorzystaj z funkcji strcat.
char tekst[80]=""; int k=11; strcpy(tekst,IntToStr(k).c_str()); //mozna uzyc strcat strcat(tekst,"Cos");
KoDo
GG:3857769