In questo articolo presento tre semplici funzioni per ripulire le stringhe C dagli spazi che precedono o seguono; chi lavora anche in Basic si sentirà a sua agio con questi tre prototipi:

char *rtrim(char *str);
char *ltrim(char *str);
char *trim(char *str);


La rtrim() ripulisce dagli spazi a destra, la ltrim() ripulisce dagli spazi a sinistra e la trim() ripulisce sia a destra che a sinistra; queste funzioni lavorano direttamente sulla stringa passata in input e, per comodità di utiizzo, restituiscono la stessa stringa come valore di ritorno.
Questo permette di scrivere, ad esempio:

printf(trim(miastringa));

anzichè

trim(miastringa);
printf(miastringa);

La prima funzione che prendiamo in esame è la rtrim() che presento qui sotto

char *rtrim(char *str)
{
    size_t len;
    char *p;
    
    len = strlen(str);
    if (len > 0)
    {
        p = str + len;
        do
        {
            p--;
            if (!isspace(*p))
                break;
            *p = '\0';
        } while (p > str);
    }

    return str;
}

La rtrim() procede a ritroso dalla fine della stringa finchè trova un carattere che non è spazio oppure arriva all'inizio, spostando indietro il terminatore di stringa.

La funzione ltrim() è leggermente più complessa della rtrim() in quanto in presenza di spazi all''inizio è necessario spostare ("shiftare") a sinistra tutti i caratteri.

char *ltrim(char *str)
{
    char *pstart;
    char *p;

    pstart = str;
    while (isspace(*pstart))
        pstart++;

    if (pstart > str)
    {
        p = str;
        while(*pstart)
        {
            *p = *pstart;
            pstart++;
            p++;
        }
        *p = '\0';
    }

    return str;
}

Infine, la funzione più semplice risulta la trim() che utilizza le due precedenti per rimuovere spazi sia a sinistra che a destra.

char *trim(char *str)
{
    rtrim(str);
    ltrim(str);

    return str;
}

L'utilizzo di tali funzioni è molto semplice ma se avete qualche dubbio, non esitate a contattarmi! Buon lavoro!