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

  • CPT.Pirk
    Jómunkásember

    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.

    No alakítottam rajta egy kicsit.

    char *strChomp(char *buffer)
    {
    if (buffer && *buffer) {
    while (*buffer != '\0') {
    if (*buffer == '\n') {
    if (*buffer++ == '\0') {
    *buffer = '\0';
    return buffer;
    }

    }
    buffer++;
    }
    return buffer;
    }
    return NULL;
    }

    Így most elvileg végigmegy a sztringen karakterenként a lezáró nulláig. Közben ha talál \n-et, akkor megnézi, hogy a rá következő karakter lezáró 0-e.

    Egyébként van valami ordító hibám? Mert eddig csak és kizárólag segfaultot kaptam az assert teszteknél.

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