Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: merkkijonon paloittelu

Tampio [01.03.2009 17:55:56]

#

Jos käsiteltävä merkkijono on esim "aa:bb:cc:dd", niin miten saisin siitä poimittua vaikka aa ja bb ja sijoitettua ne omiin char-tyyppisiin muuttujiinsa, jotta voin sitten vertailla niitä muihin merkkijonoihin? Kyseisen merkkijonon sain paloiteltua strtok() funktiolla, mutta siitä halutun palan poimiminen ei ota onnistuakseen.

Grez [01.03.2009 18:14:44]

#

"aa" tai "bb" ei voi sijoittaa char-tyyppiseen muuttujaan, koska kummassakin on enemmän kuin yksi merkki. Ehkä tarkoitit char-taulukkoa tai osoitinta char-taulukkoon..

Mikäs tuossa strtok-funktiossa tuottaa ongelmaa? Netistä löytyy ziljoona esimerkkiä jossa se toimii, joten jos pistäisit esimerkin jossa se ei toimi (oma koodisi) niin ei tarvitsisi yrittää arvata, mikä menee pieleen.

hunajavohveli [01.03.2009 18:28:56]

#

Esimerkiksi näin:

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

int main(void)
{
	char str[] = "aa:bb:cc:dd";
	char *sub[4];

	sub[0] = strtok(str, ":");	// aa
	sub[1] = strtok(NULL, ":");	// bb
	sub[2] = strtok(NULL, ":");	// cc
	sub[3] = strtok(NULL, "\0");	// dd

	printf("%s %s %s %s\n", sub[0], sub[1], sub[2], sub[3]);
	return 0;
}

Tampio [01.03.2009 21:11:55]

#

No nyt sain homman toimimaan. Omaa koodia en tänne kaikkien logiikkavirheiden ja epäeleganttisuuksien takia kehdannut pistää :)
En ollut tuon strtokin toimintaa ihan täysin ymmärtänyt, ja vieläkin vähän hämärän peitossa mitä nuo NULLit merkkijonon paikalla tekee ja \0 delimiterinä.
Mutta kiitos kuitenkin avusta.

Grez [01.03.2009 21:18:10]

#

NULL tarkoittaa että jatketaan siitä mihin viimeksi jäätiin ja \0 tarkoittaa merkkijonon loppua (koska sen dd:n jälkeen ei ole : -merkkiä)

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta