Hirdetés

Új hozzászólás Aktív témák

  • Jester01
    veterán

    Van nekem egy kódom, ami ránézésre nekem tetszik, de assertes teszten mindig elbukik. Mi a gáz vele?

    char *strChomp(char *buffer)
    {
    char c;
    if (buffer && *buffer)
    while (*buffer++){
    c = buffer;
    if (c == "\n")
    *buffer = *(buffer--);
    return *buffer;
    }
    return NULL;
    }

    Annyit kell csinálnia, hogy leszedi a sorvégi új sor jelet, ha van.

    Ennek már eleve a fordításnál el kellene "buknia":
    c = buffer; Hiányzik egy csillag.
    return *buffer; itt meg van egy fölösleges ;)
    if (c == "\n") ide karakter konstans kell, aposztrófok között nem idézőjelben
    *buffer = *(buffer--); szerkezet nem szabályos
    bár az if belsejét szépen behúztad, attól még oda kellene a kapcsoszárójel (így is fordul, csak mást csinál mivel a return *buffer; már nem lesz a feltétel hatása alatt

    A logikáját amúgy sem értem. Ugye a while feltétel eleve növeli a pointert, tehát c-be a következő karakter kerül már. Ha ez \n (akárhol is van, tehát nem feltétlen a string végén) akkor ezt, és csak ezt, megpróbálja felülírni az ezt megelőző karakterrel és itt abba is hagyja a feldolgozást, visszatérési érték pedig a buffer aktuális értéke lesz (tehát nem a string eleje). Ha pl. a bemenet "abc\ndef" akkor a kimenet "cdef" esetleg "ccdef" lesz.

    Mivel az a feladat, hogy szedje le az új sor jelet a string végéről, ezért egyszerűen meg kell keresni a lezáró nulla byteot és azt eggyel előrébb hozni ha az előző karakter \n volt.

Új hozzászólás Aktív témák