Mea culpa

 ( NevemTeve | 2015. október 15., csütörtök - 13:54 )

Ezt most találtam egy saját programomban, és nagyon nem tetszik:

q= strchr (p, '\0');

Mi a haragos moha ez? Jó, tegyük fel, hogy működik, de akkor is inkább így kellene:

q= p + strlen (p);

vagy

q= memchr (p, '\0', plim-p);

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

"haragos moha"

:)

- Gyerekek, mirol lehet felismerni a merges gombat?
- Foldhoz csapkodja a kalapjat!
--
Blog | @hron84
Üzemeltető macik

q= strchr (p, '\0');

mit akarsz ezzel ellenorizni/csinalni?

--
"nem tárgyszerűen nézem a dolgot, hanem a vádló szerepéből. Sok bosszúságot okoztak, örülnék ha megbüntetnék őket - tudom gyarló dolog, de hát nem vagyok tökéletes." (BehringerZoltan)

q-t a p vége után állítani.

Megkeresi a stringben az első \0-t (ami egyben a string terminátora)... Ami más karakter esetében teljesen rendben is lenne, de pont a nullával nem tetszik nekem; nem értem, hogy miért így csináltam annó.

Tulajdonképpen előfordulhatna, hogy a strchr ilyenkor NULL-t adjon vissza, ha mondjuk így lenne implementálva:

char *strchr (const char *p, int c)
{
    return p? memchr (p, c, strlen(p)): NULL;
}

Amennyiben a bemenet NULL, NULL-t kell visszaadjon, hiszen a bemenetben nem található meg a keresett érték.
És ilyenkor NULL a visszatérés definíció szerint.
http://pubs.opengroup.org/onlinepubs/009695399/functions/strchr.html

Hoppá, akkor ezt rosszul írtam; nem a p==NULL eset problémás, hanem a c=='\0' eset.

Amennyiben p rendes string, nincs azzal gond.
The terminating null byte is considered to be part of the string.

Amennyiben nem az, akkor eleve nem is szabadna meghívni az strchr-t. De ez ugyebár nem derül ki fordítási időben. A C már csak ilyen, magas szintű assembly.