Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di wino_7
    Registrato dal
    Dec 2006
    Messaggi
    537

    [C] Problema con stringhe di lunghezza variabile

    Salve a tutti sto scrivendo un programmino che legge da un file una serie di stringhe e le riscrive in un altro con l'ggiunta di doppi apici.

    Il file in questione da cui devo leggere è strutturato così:

    Codice PHP:
    ciaogmsn.it
    pippogyahoo
    .com
    ciaogmsn
    .it
    pippogyahoo
    .com
    ecc
    .ecc.... 
    Il file nuovo deve essere composto in questo modo:
    Codice PHP:
    "ciaogmsn.it"
    "pippogyahoo.com"
    "ciaogmsn.it"
    "pippogyahoo.com"
    ecc.ecc.... 
    Il programma che ho scritto è questo :
    Codice PHP:
    #include <stdio.h>

    int main(void)
    {
        
    char Lista[395][40];
        
    int xz;
        
    FILE *Punt;
        
    FILE *Nuovo;
        
        if ( (
    Punt fopen("MailingList.txt""r") ) == NULL )
        {
          
    printf("Il file non è stato aperto !!!!\n");
        }
        
        else
        {
          while(!
    feof(Punt))
          {
            static 
    int i 0;
            
    int j 0;
            
            while ( ( 
    Lista[i][j] = fgetc(Punt) ) != EOF )
            {
              
    j++;
            }
            
    i++;
          }
        }
        
    fclose(Punt);
        
        
    Nuovo fopen("Lista_Corretta.txt""w");
        
        for(
    0395x++)
        {
          
    fprintf(Nuovo"\"");
          for(
    040z++)
          {
            
    fprintf(Nuovo"%c"Lista[x][z]);
          }
          
    fprintf(Nuovo"\"\n");
        }
        
    fclose(Nuovo);
        
      
    system("PAUSE");
      return 
    0;

    Il problema è che non conoscendo la lunghezza dei caratteri delle stringhe ma solo il numero di esse (395) ho il problema con la lunghezza dell'array.

    Per ovviare al problema ho creato la seconda dimensione di 40 che so che è il numero massimo di caratteri nella stringa ma quando faccio la fprintf mi genera un file con stringhe "quasi" concatenate di 40 caratteri ma la cosa più strana è che il programma è come se riuscisse a capire ugualmente dove mettere l' a capo a fine stringa nonostante tra i due apici ci siano 40 caratteri non appartenentio tutti alla stessa stringa.

    Dateci un'acchiata grazie.

  2. #2
    Dovresti leggere le stringhe con scanf, (possibilmente nella versione che controlli la dimensione dell'input leggi il manuale) oppure controllare tu dove sono i ritorni a capo e sostituirli con i terminatori di stringa.

    Ma la domanda vera che dovresti fare è.... perchè caricare in memoria tutte le stringhe del file?

    E soprattutto stai attento a scrivere codice soggetto ad attacchi di buffer overflow... (vedi http://it.wikipedia.org/wiki/Buffer_overflow)

    L'algoritmo furbo è il seguente:

    1) Scrivere nel file di output un doppio apice

    2) Per ogni carattere letto in input se è un ritorno a capo scrivi in output (un doppio apice, un ritorno a capo e un doppio apice) altrimenti scrivi il carattere letto.

    3) Se necessario scrivo in output un altro doppio apice

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.