Problém - funkce strtok – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém - funkce strtok – C / C++ – Fórum – Programujte.comProblém - funkce strtok – C / C++ – Fórum – Programujte.com

 

Petr
~ Anonymní uživatel
746 příspěvků
6. 5. 2010   #1
-
0
-

Dobrý den, mám problém s použitím funkce strtok.
Potřebuji nějaký řetězec (nazvěme ho třeba path) rozdělit na několik menších, kde oddělovač bude "/". Zkoušel jsem funkci strtok, kód vypadal takto:

char *path = "Root/Muzika/BonJovi/NejakaPisnicka";

char *token;
token = strtok(path, "/");

while (token != NULL)
{
// něco
token = strtok(NULL, "/");
}


Program se bez problémů zkompiloval, nicméně poté "spadl". Pokud bych jako oddělovač použil třeba mezeru, vše je jak má. S lomítkem to ale nejde a nevím proč.
Pokud někdo víte co s tím, budu moc rád za radu. Předem díky.

Nahlásit jako SPAM
IP: 78.80.225.–
liborb
~ Redaktor
+18
Guru
6. 5. 2010   #2
-
0
-

Vypadá to neškodně, možná bych spíš očekával char path[]. Když tak alespoň napiš jaký překladač a jaký OS.

Nahlásit jako SPAM
IP: 195.189.142.–
liborb
~ Redaktor
+18
Guru
6. 5. 2010   #3
-
0
-

Vypadá to neškodně, možná bych spíš očekával char path[]. Když tak alespoň napiš jaký překladač a jaký OS.

Nahlásit jako SPAM
IP: 195.189.142.–
Petr
~ Anonymní uživatel
746 příspěvků
6. 5. 2010   #4
-
0
-

Tak OS mám Windows 7 64bit, a program píšu ve Visual Studiu 2008 Professional, takže překladač Visual Studia.

Nahlásit jako SPAM
IP: 78.80.225.–
liborb
~ Redaktor
+18
Guru
6. 5. 2010   #5
-
0
-

Btw to na tobě nevyžaduje použití bezpečné verze strtok_s?
A druhá věc, mám takový dojem, že strtok mění obsah toho bufferu, jehož obsah se rozděluje. Zkus si ten buffer alokovat ...

Nahlásit jako SPAM
IP: 195.189.142.–
sputnikone+1
Věrný člen
6. 5. 2010   #6
-
0
-

To liborb : Podle MSDN to má skoro totožně (oni mají char pole[]), ale taky bych použil raději strtok_s...

Nahlásit jako SPAM
IP: 147.251.53.–
Petr
~ Anonymní uživatel
746 příspěvků
6. 5. 2010   #7
-
0
-

Díky za rady, problém vyřešen. Použil jsem char path[]. Vyskytl se ale ještě jeden problém. Mám následující metodu:

bool List::ListSearch(char *name)

{
if (this->item->GetName() == name)
return true;
else
{
if (this->next != NULL)
this->next->ListSearch(name);
else
return false;
}
}


Když tuto metodu zavolám, např. takto:

char *token = "Music";

ListSearch(token);


vrátí se True (Music opravdu existuje). Pokud ale napíšu:

char *token;

token = strtok(path, "/");
ListSearch(token);


vrátí se False, i přesto, že token = "Music". Zkoušel jsem si proměnnou token vypsat a opravdu se vypsalo to, co jsem očekával, v tomto případě Music. Zdá se mi to dosti záhadné...

Nahlásit jako SPAM
IP: 78.80.225.–
Bald3rr0
Super člen
6. 5. 2010   #8
-
0
-

To Petr : K porovnání dvou char* použj fci strcmp(retezec1, retezec2)

Nahlásit jako SPAM
IP: 82.100.0.–
Petr
~ Anonymní uživatel
746 příspěvků
6. 5. 2010   #9
-
0
-

To Bald3rr : Díky moc za rychlou a přitom užitečnou odpověď. Funguje, takže ještě jednou díky.

Nahlásit jako SPAM
IP: 78.80.225.–
sputnikone+1
Věrný člen
6. 5. 2010   #10
-
0
-

To Bald3rr : Tohle by už snad stálo za to nějak připomenout případným zakladatelům nový vláken, objevuje se to tady nějak moc často :D

Nahlásit jako SPAM
IP: 147.251.53.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 112 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý