Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [c] stringa

    ciao!!!

    ho bisogno di aiuto per riuscire a fare un programma che prenda in inputuna stringa senza sapere prima la sua lunghezza!!!
    io ho cercato di risolvere questo problema cosi :


    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>

    int main()
    {
    char *array;
    int grd = 10, grd_len;

    array = (char *) malloc(10);


    array = fgets(array, grd, stdin );

    grd_len = strlen ( array);
    printf("\n la grandezza della stringa %d", grd_len);

    while( grd_len == grd -1) {

    grd = grd+100;
    realloc(array, grd);
    array = fgets(array, grd, stdin );
    grd_len = strlen(array) ;
    printf("\n la grandezza della stringa %d", grd_len);

    } ;



    printf("\n la grandezza della stringa %d\n\n", grd_len);
    puts(array);


    system("PAUSE");

    return 0;


    }


    ma non ho ottenuto grandi risultati!!!!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Per leggere una riga di lunghezza "arbitraria" da uno stream si può fare una cosa molto "pulita" di questo tipo:

    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    char *read_line (FILE *f)
    {
        int   block = 256;
        int   capacity = 0, len = 0;
        char *buf = NULL, *p;
    
        do {
            capacity += block;
    
            p = (char*) realloc (buf, capacity);
    
            if (p == NULL)
            {
                free (buf);
                return NULL;
            }
    
            buf = p;
    
            fgets (&buf[len], capacity-len, f);
    
            if ((p = strchr (&buf[len], '\n')) != NULL)
                *p = '\0';
    
            len += (int) strlen (&buf[len]);
        } while (p == NULL);
    
        p = (char*) realloc (buf, len+1);
    
        if (p != NULL)
            buf = p;
    
        return buf;
    }
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Moderazione

    Originariamente inviato da PeppePes88
    [c] stringa
    Usa titoli più significativi e descrittivi per le discussioni.
    Questo l'ho corretto io.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    il codice inserito funziona perfetamente... ma se lo coppio e basta non imparo niente!! quindi ho visto bene cosa hai fatto tu e ne ho riscrito uno mio... come era ovvio funziona male!!

    e non riesco a capire dove sbaglio???


    char * read_line (FILE *f)
    {
    char *buf = malloc(10), *p;
    int len = 0 , grd = 10;

    do {

    fgets(&buf[len], grd , f);

    //puts(buf);

    p = strchr ( buf , '\n');

    if ( p == NULL) {
    len += strlen(buf);
    grd += 10;
    7/ printf("%d, %d\n", grd, len);
    buf = (char *) realloc(buf, grd);

    }

    }while( p == NULL);

    return buf;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.