[C] gestire stringhe

di il
9 risposte

[C] gestire stringhe

Ciao a tutti, sono nuova ed avrei bisogno di una mano...
sto facendo una programma client/server che dovrebbe conprendere anche l'invio di msg da parte di utenti..
Non riesco a trovare un modo per far leggere un intero msg, salvarlo e spedirlo..Richiedo l'inserimento della frase ma con scanf mi va a leggere solo la prima parola, l'unico modo che al momento ho implementato è scrivere una parola e invio, altra parola e invio.. in questo modo riesco a salvare tutta la frase per poi inviarla.. Ora mi chiedevo ci sarà un modo più intelligente per fare questo? Perchè quello che sto facendo è veramento BRUTTO..
grazie
IsaB

p.s. so che sembrerò stupida ma il c non l'ho mai usato.. con java è tutti molto più semplice...

IsaB

9 Risposte

  • Re: [C] gestire stringhe

    Dai un occhiata alla funzione gets penso sia quello che ti serve.

    non so darti maggiori informazione perche studio java e il c lo conosco a livello base anzi forse anche un po meno....
  • Re: [C] gestire stringhe

    E' quello che pensavo ma se uso gets e scanf all'interno dello stesso metodo gets non mi funziona...

    IsaB
  • Re: [C] gestire stringhe

    Mi sembra strano che da questi problemi...
    guarda non so aiutarti a me non è mai successo, forse perché non mi è mai capitata quell'occasione.

    mi dispiace.

    cao gino
  • Re: [C] gestire stringhe

    Ciao
    controlla se per il C esiste una libreria tipo string (per il c++ c'e')
    altrimenti potresti definire un tipo come stringa che in realta' e' un puntatore di caratteri.
  • Re: [C] gestire stringhe

    Se non sbaglio c'è la libreria string.h

    #include <string.h>;

    ciao
  • Re: [C] gestire stringhe

    La libreria <string.h> non contiene funzioni per gestire l'input e l'output.

    per leggere delle intere righe immesse da tastiera devi usare la gets, il cui prototipo è:

    char *gets(char *s)

    Legge la riga in ingresso successiva, e la memorizza nel vettore s (tale vettore deve essere della grandezza opportuna per contenere tutti i caratteri della riga + '\0'); sostituisce il carettere newline con '\0'. Restituisce s se tutto ok, o NULL se si arriva alla fine del flusso.

    Se usi scanf e gets insieme, devi fare attenzione che se utilizzi prima la scanf, a questa devi fargli mangiare anche l'eventuale '\n', se no la gets ti prende solo '\n' perchè sarebbe il primo carattere che si trova nel flusso di input.

    guarda questo esempio, dove suppongo prima di scrivere una parola e poi di andare a capo e scrivere una riga, infine stampo la parola e la riga:

    #include <stdio.h>

    main(){
    char parola[10];
    char riga[100];//suppongo linee con un massimo di 100 caratteri

    scanf("%s\n",parola);//leggo la parola e mangio il carattere di newline
    gets(riga);//leggo la riga successiva

    printf("%s\n",parola);
    printf("%s\n",riga);

    return 0;
    }




    I cretini sono sempre più ingegniosi delle precauzioni che si prendono per impedirgli di nuocere
  • Re: [C] gestire stringhe

    Puoi utilizzare le funzioni di I/O di basso livello, cioè la read()

    Il prototipo è :

    ssize_t read(int fd,void* buf,size_t count)

    fd è il descrittore di un canale da cui leggere, può essere lo standard input, o un socket, o un file o qualsiasi canale di input.

    buf è la variabile in cui vuoi che siano memorizzati i dati letti; nel tuo caso un char*

    count è il numero massimo di byte che vuoi che siano letti,ma se vengono letti meno byte di quanto richiesto non c'è errore.

    Ritorna il numero effettivo di byte letti, zero se non ha letto neinte, -1 in caso di errore.

    Cosa importante è che questa funzione non mette il /0 alla fine della stringa, quindi dovrai aggiungerlo tu manualmente.

    Ad esempio per leggere dallo standard input dovrai fare :

    char *buf;
    ../*codice tuo*/
    bytes=read(STDIN_FILENO,buf,512);
    buf[bytes-1]='\0';

    ciao ciao
  • Re: [C] gestire stringhe

    Dimenticavo devi aggiungere l'header file unistd.h (sotto unix)
  • Re: [C] gestire stringhe

    GRAZIE a tutti dei suggerimenti... finalmente ci sono riuscita!!!!!!

    IsaB
Devi accedere o registrarti per scrivere nel forum
9 risposte