Funzione elimina spazi

di il
6 risposte

Funzione elimina spazi

Ho creato una funzione che data in input una stringa, se ci sono spazi me li elimina.
Se inserisco rossi bianchi mi deve stampare rossibianchi

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

char * elimina_spazi (char * str)
{
    int x=0, i;
    for (i=0; i<strlen(str); i++) {
        if (str[i]==' ') {
            x=i;
            break;
        }
    }
    //codice che sposta le lettere
    for (int i2=x; i2<strlen(str); i2++)
        str[i2]=str[i2+1];
    return str;
}

int main(int argc, const char * argv[])
{
    char cognome[30];
    printf("Inserisci cognome: ");
    scanf("%s", cognome);
    puts(cognome);
    strcpy(cognome, elimina_spazi(cognome));
    puts(cognome);
    return 0;
}
Il fatto è che non va e non riesco a capire dove sia l'errore

6 Risposte

  • Re: Funzione elimina spazi

    Perché la scanf, così come l'hai scritta tu, legge sino al primo spazio ( ed è anche soggetta a buffer overflow, quindi una brutta pratica)...
    Dovresti usare fgets.
  • Re: Funzione elimina spazi

    Ho usato gets e non fgets e funziona. Ma il compilatore mi scrive:
    warning: this program uses gets(), which is unsafe.
    Come mai?
  • Re: Funzione elimina spazi

    Ho risolto scrivendo
    
        fgets(cognome, sizeof(cognome), stdin);
    
  • Re: Funzione elimina spazi

    Inoltre se do in input ROSSI mi restiutisce OSSI e non ROSSI, come mai?
  • Re: Funzione elimina spazi

    Ho risolto con un if
  • Re: Funzione elimina spazi

    Fabio97 ha scritto:


    Ho risolto con un if
    Un if per risolvere il problema di una lettera mancante?
Devi accedere o registrarti per scrivere nel forum
6 risposte