.[ ČeskéHry.cz ].
prevod int na const char
Jdi na stránku 1, 2, 3  Další
 
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++
Zobrazit předchozí téma :: Zobrazit následující téma  
Autor Zpráva
arnir



Založen: 10. 11. 2007
Příspěvky: 9

PříspěvekZaslal: 11. červenec 2008, 22:10:19    Předmět: prevod int na const char Odpovědět s citátem

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 Crying or Very sad
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Mem



Založen: 28. 07. 2007
Příspěvky: 1959
Bydliště: Olomouc

PříspěvekZaslal: 11. červenec 2008, 22:37:42    Předmět: Odpovědět s citátem

Zlaty C#, tam das na cemkoliv ToString() a frcis Wink
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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Houp



Založen: 28. 07. 2007
Příspěvky: 672

PříspěvekZaslal: 11. červenec 2008, 23:05:00    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
frca



Založen: 28. 07. 2007
Příspěvky: 1561

PříspěvekZaslal: 11. červenec 2008, 23:47:19    Předmět: Odpovědět s citátem

Když už, tak snprintf, ušetříš si možný buffer overflow.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
Marek



Založen: 28. 07. 2007
Příspěvky: 1782
Bydliště: Velká Morava

PříspěvekZaslal: 11. červenec 2008, 23:57:42    Předmět: Odpovědět s citátem

A nebo rovnou "security" verze od MS: snprintf_s - ušetříš si možný buffer overflow. Wink 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 Wink)
_________________
AMD Open Source Graphics Driver Developer
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
arnir



Založen: 10. 11. 2007
Příspěvky: 9

PříspěvekZaslal: 12. červenec 2008, 10:29:24    Předmět: Odpovědět s citátem

Mem napsal:
Zlaty C#, tam das na cemkoliv ToString() a frcis Wink
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. Crying or Very sad

stejne diky
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 12. červenec 2008, 10:46:44    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
rezna



Založen: 27. 07. 2007
Příspěvky: 2156

PříspěvekZaslal: 12. červenec 2008, 10:50:18    Předmět: Odpovědět s citátem

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. Crying or Very sad

stejne diky


mno to jsi trochu vedle ne? Smile - 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 Wink - problem je pouze naopak - pokud chces z const char* udelat char* - pak je potreba nejaky cast.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
arnir



Založen: 10. 11. 2007
Příspěvky: 9

PříspěvekZaslal: 12. červenec 2008, 10:54:52    Předmět: Odpovědět s citátem

aha to jsem nevedel diky.
jeste neco zkusim
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
ladik-BigBoss



Založen: 28. 07. 2007
Příspěvky: 162

PříspěvekZaslal: 13. červenec 2008, 00:09:04    Předmět: Odpovědět s citátem

kdybys chtel misto sprintf neco vic C++ tak pouzij string stream
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu Odeslat e-mail Zobrazit autorovi WWW stránky
AdamHlavatovic



Založen: 18. 12. 2007
Příspěvky: 12

PříspěvekZaslal: 20. červenec 2008, 08:00:06    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Yossarian



Založen: 28. 07. 2007
Příspěvky: 274
Bydliště: Šalingrad

PříspěvekZaslal: 20. červenec 2008, 10:58:46    Předmět: Odpovědět s citátem

to by me pomerne zajimalo, co ten tvuj kod ma delat (co dela je zrejme - absolutni nesmysl)
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
Tutchek



Založen: 28. 07. 2007
Příspěvky: 140
Bydliště: Praha -Pankrác

PříspěvekZaslal: 20. červenec 2008, 11:08:48    Předmět: Odpovědět s citátem

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
Zobrazit informace o autorovi Odeslat soukromou zprávu Zobrazit autorovi WWW stránky
AdamHlavatovic



Založen: 18. 12. 2007
Příspěvky: 12

PříspěvekZaslal: 20. červenec 2008, 14:15:31    Předmět: Odpovědět s citátem

> 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
Zobrazit informace o autorovi Odeslat soukromou zprávu
AdamHlavatovic



Založen: 18. 12. 2007
Příspěvky: 12

PříspěvekZaslal: 20. červenec 2008, 14:18:53    Předmět: Odpovědět s citátem

> ... 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
Zobrazit informace o autorovi Odeslat soukromou zprávu
Zobrazit příspěvky z předchozích:   
odeslat nové téma   Odpovědět na téma    Obsah fóra České-Hry.cz -> C / C++ Časy uváděny v GMT + 1 hodina
Jdi na stránku 1, 2, 3  Další
Strana 1 z 3

 
Přejdi na:  
Nemůžete odesílat nové téma do tohoto fóra
Nemůžete odpovídat na témata v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete hlasovat v tomto fóru


Powered by phpBB © 2001, 2005 phpBB Group


Vzhled udelal powermac
Styl "vykraden" z phpBB stylu MonkiDream - upraveno by rezna