Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
arnir
Založen: 10. 11. 2007 Příspěvky: 9
|
Zaslal: 11. červenec 2008, 22:10:19 Předmět: prevod int na const char |
|
|
mam tyto dve promenne:
kód: |
const char * text = "RateOfFire";
int=5; |
a potrebuji je jak bych rekl lidove "spojit" aby se ve vysledku promenna text rovnala : "RateOfFire5"
je to asi trivialnost ale me prevody nikdy moc nesly  |
|
Návrat nahoru |
|
 |
Mem

Založen: 28. 07. 2007 Příspěvky: 1959 Bydliště: Olomouc
|
Zaslal: 11. červenec 2008, 22:37:42 Předmět: |
|
|
Zlaty C#, tam das na cemkoliv ToString() a frcis
V C je asi standardni reseni sprintf, v C++ jde pro vystup pouzit cout << kde muzes za sebe naskladat co chces, ale nevim jestli jde ten vystup priradit do char* _________________
 |
|
Návrat nahoru |
|
 |
Houp
Založen: 28. 07. 2007 Příspěvky: 672
|
Zaslal: 11. červenec 2008, 23:05:00 Předmět: |
|
|
no pokud se nemýlím, tak s const charem už opravdu nic neuděláš..
takže pro začátek to bude chtít obyčejný char..
no a jak říkal mem, asi nejlepší způsob je sprintf (funguje podobně jako fprintf) _________________
 |
|
Návrat nahoru |
|
 |
frca

Založen: 28. 07. 2007 Příspěvky: 1561
|
Zaslal: 11. červenec 2008, 23:47:19 Předmět: |
|
|
Když už, tak snprintf, ušetříš si možný buffer overflow. |
|
Návrat nahoru |
|
 |
Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 11. červenec 2008, 23:57:42 Předmět: |
|
|
A nebo rovnou "security" verze od MS: snprintf_s - ušetříš si možný buffer overflow. Samozřejmě pokud nevíš, co děláš, před přetečením bufferu tě nezachrání ani sebelepší funkce. (nejdelší, co jsem našel, je _snwprintf_s_l, prase aby se v tom vyznalo ) _________________ AMD Open Source Graphics Driver Developer |
|
Návrat nahoru |
|
 |
arnir
Založen: 10. 11. 2007 Příspěvky: 9
|
Zaslal: 12. červenec 2008, 10:29:24 Předmět: |
|
|
Mem napsal: |
Zlaty C#, tam das na cemkoliv ToString() a frcis
V C je asi standardni reseni sprintf, v C++ jde pro vystup pouzit cout << kde muzes za sebe naskladat co chces, ale nevim jestli jde ten vystup priradit do char* |
vim ze pomoci cout bych to vypsal.
ale ja pouzivam irrlicht a nepotrebuji tam tento vystup.
mam totiz jeden kod ktery nacita hodnoty z xml. je to stazena pridavna knihovna. mam totiz nasledujici kod:
kód: |
if (!strcmp("RateOfFire1", xml_weapons->getNodeName()))
{
RateOfFire[1] = xml_weapons->getAttributeValueAsFloat("value");
}
// a znovu jen +1
if (!strcmp("RateOfFire2", xml_weapons->getNodeName()))
{
RateOfFire[2] = xml_weapons->getAttributeValueAsFloat("value");
}
|
a tak se mi stejnym zpusobem opakuje hrozna spousta radku podsebou tak me jen napadlo ci by se to nedalo nejak zkratit prave treba pomoci for:
kód: |
for(X=1;X<10;++X)
{
if (!strcmp("RateOfFireX", xml_weapons->getNodeName()))
{
RateOfFire[X] = xml_weapons->getAttributeValueAsFloat("value");
}
}
|
ale pro toto bych prave potreboval spojit rateOfFire a cislo int.
a uz v zakladu je nutne do prikazu strcmp() dosadit const char...
asi neni zadna moznost jak to "zkratit".
jen me napada ve zdrojovem kodu knihovny nahravani toho xml(jsou to vlastne jen hlavickove soubory) upravit const char na char.
pak by uz mozna neco slo ale s const char asi nic nevymyslim.
stejne diky |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 12. červenec 2008, 10:46:44 Předmět: |
|
|
vsak to tu padlo
kód: |
char buf[256];
sprintf("%s%d", "RateOfFire", 5);
printf(buf) ==> "RateOfFire5";
|
druha vec je ze jsou lepsi metody jak to udelat a to zvolit lepsi XML, ty mas proste nevhodne zvolenou strukturu
misto
kód: |
<RateOfFire1>...</RateOfFire1>
<RateOfFire2>...</RateOfFire2>
<RateOfFire3>...</RateOfFire3>
|
bych zvolil
kód: |
<RateOfFires>
<1>...</1>
<2>...</2>
<3>...</3>
</RateOfFires>
|
a kod pro nacitani muze byt treba
kód: |
rofs = xml->GetNode("RateOfFires");
for(int x = 0; x < rofs->ChildNodeCount(); x++)
{
rof = rofs->GetChild(x);
RateOfFire[x] = rof->GetValueAsFloat();
}
|
proste si nekomplikovat zivot spojovanim stringu a cisla kdyz to jde i jinak - hlavne muj pripad resi obecne libovolny pocet "RateOfFire" elementu - tvuj resi presny pocet |
|
Návrat nahoru |
|
 |
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 12. červenec 2008, 10:50:18 Předmět: |
|
|
arnir napsal: |
a uz v zakladu je nutne do prikazu strcmp() dosadit const char...
asi neni zadna moznost jak to "zkratit".
jen me napada ve zdrojovem kodu knihovny nahravani toho xml(jsou to vlastne jen hlavickove soubory) upravit const char na char.
pak by uz mozna neco slo ale s const char asi nic nevymyslim.
stejne diky |
mno to jsi trochu vedle ne? - to ze strcmp bere argument const char* neznamena ze mu nemuzes (char *) - ten modifikator pouze znamena ze se promenna nezmeni v prubehu volani funkce
bezne se preci vola
kód: |
char buf[256] = "blbost"
if(strcmp(buf, "blbost")) {...}
|
a buf urcite neni const - problem je pouze naopak - pokud chces z const char* udelat char* - pak je potreba nejaky cast. |
|
Návrat nahoru |
|
 |
arnir
Založen: 10. 11. 2007 Příspěvky: 9
|
Zaslal: 12. červenec 2008, 10:54:52 Předmět: |
|
|
aha to jsem nevedel diky.
jeste neco zkusim |
|
Návrat nahoru |
|
 |
ladik-BigBoss

Založen: 28. 07. 2007 Příspěvky: 162
|
Zaslal: 13. červenec 2008, 00:09:04 Předmět: |
|
|
kdybys chtel misto sprintf neco vic C++ tak pouzij string stream |
|
Návrat nahoru |
|
 |
AdamHlavatovic
Založen: 18. 12. 2007 Příspěvky: 12
|
Zaslal: 20. červenec 2008, 08:00:06 Předmět: |
|
|
Jednoduche spojenie retazca a cislice (0 az 9)
kód: |
char str[13] = "RateOfFires";
str[12] = '\0';
for (int i = 0; i < 10; i++)
{
str[11] = '0' + i;
...
} |
|
|
Návrat nahoru |
|
 |
Yossarian

Založen: 28. 07. 2007 Příspěvky: 274 Bydliště: Šalingrad
|
Zaslal: 20. červenec 2008, 10:58:46 Předmět: |
|
|
to by me pomerne zajimalo, co ten tvuj kod ma delat (co dela je zrejme - absolutni nesmysl) |
|
Návrat nahoru |
|
 |
Tutchek
Založen: 28. 07. 2007 Příspěvky: 140 Bydliště: Praha -Pankrác
|
Zaslal: 20. červenec 2008, 11:08:48 Předmět: |
|
|
Yossarian napsal: |
to by me pomerne zajimalo, co ten tvuj kod ma delat (co dela je zrejme - absolutni nesmysl) |
Tak totalni nesmysl to neni... jen je to... zvlastni... Teda nevim jak projde ta inicializace... ale pro cisla 0 az 9 se to se skripenim zubu da videt funkcne... ale napsat tohle nekdo do projektu, tak bych si pomyslel ze je blazen... _________________ Nemarni čas u kompu, pojď si zaběhat do lesa
function god_exists() { return false; } |
|
Návrat nahoru |
|
 |
AdamHlavatovic
Založen: 18. 12. 2007 Příspěvky: 12
|
Zaslal: 20. červenec 2008, 14:15:31 Předmět: |
|
|
> to by me pomerne zajimalo, co ten tvuj kod ma delat (co dela je zrejme - absolutni nesmysl)
a) Robi to presne to co tazatel chcel, tj. k retazcu "RateOfFires" to postupne pridava cislice 0 az 9 teda "RateOfFires0", "RateOfFires1", "RateOfFires2", atd..
b) Pokial nepoznate jazyk c,c++ (co je zrejme s vasej reakcie) tak by ste sa v tomto fore nemal realizovat. |
|
Návrat nahoru |
|
 |
AdamHlavatovic
Založen: 18. 12. 2007 Příspěvky: 12
|
Zaslal: 20. červenec 2008, 14:18:53 Předmět: |
|
|
> ... Teda nevim jak projde ta inicializace ...
Takato inicializacia
kód: |
char str[] = "nejaky retazec"; |
je v c,c++ vcelku bezna a uplne v poriadku. |
|
Návrat nahoru |
|
 |
|