Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    63

    [programmazione c] problema con concatenzione stringhe su lettura da file

    salve a tutti... mi chiedevo se poteste darmi una mano..
    Il mio problema è che devo prendere da file delle stringhe e poi concatenarle tra loro in un unica stringa e stamparla a video ..

    Il mio problema è che nn so perchè ma nella stampa a video mi va sempre a capo tra una concatenzione e l'altra e io questo vorrei evitarlo...vi mando i pezzi di codice che interessano cosi mi potete dire se c'è qualche errore

    codice:
         
    res=fgets(buf, F, l);    
     strcpy(dicom[i].descrizione,buf);    
     strcat(codice,dicom[w1].codice);             
     res=fgets(buf, F, m);    
     strcpy(accessories[i].descrizione,buf);    
     strcat(codice,accessories[w1].codice);   
     printf(" \n codice : %s",codice);
    In realtà se ne concatenano molte di piu ma il concetto è lo stesso......
    l,m sono file
    F vale 600
    buf è char buf[F]
    codice ,dicom[w1].codice,accessories[w1].codice sono char[1]
    i,w1 sono int

    grazie per eventuali aiuti

  2. #2
    fgets memorizza nella stringa anche il \n che termina la riga. Ti basta sostituire il \n in questione con un NUL per eliminare il problema:
    codice:
    res=fgets(buf, F, l);    
    buf[strlen(buf)-1]=0;
    .
    Un consiglio: usa sempre le versioni sicure delle funzioni per lavorare sulle stringhe (quelle con la n nel nome, ad esempio strncpy, strncat, eccetera); meglio una stringa troncata che un buffer overflow.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    63
    ok grazie ..ma scusa ti faccio un'altra domanda se uso strncpy me la tronca da sola?e risolvo lo stesso il problema?

  4. #4
    Sì, te la tronca alla lunghezza che specifichi (che ovviamente specificherai in modo tale da non sforare dal buffer). Occhio che queste funzioni "sicure" quando troncano non aggiungono il NUL in fondo alla stringa, per cui dovrai farlo manualmente. Di fatto la prassi di solito è:
    codice:
    #define ARRSIZE(arr)    (sizeof(arr)/sizeof(*(arr)))
    
    char buffer[DIMENSIONI];
    /* ... */
    strncpy(buffer,stringaDiOrigine,ARRSIZE(buffer)-1);
    buffer[ARRSIZE(buffer)-1]=0;
    (in questo caso l'uso di ARRSIZE e di sizeof è equivalente, ma se usi caratteri Unicode devi usare necessariamente la macro in questione o qualcosa di analogo).
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2009
    Messaggi
    63
    grazie mille ..ho risolto grazie al tuo aiuto ...

  6. #6
    Prego; ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.