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

    Testo di una stringa uguale al testo di un file in c

    Salve, come faccio ad impostare il testo di una stringa come il testo contenuto in un file in linguaggio c?
    Così:

    FILE *file;
    file = fopen("/Users/user/Desktop/compito/testo.txt", "r");
    char string[300] = Testo del file!

    Cioè voglio inizializzare il testo di una stringa come il testo di un file che leggo.
    Spero mi possiate aiutare

  2. #2
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Io userei la funzione strcat() l'array dovrà avere elementi sufficienti per contenere tutti i caratteri del file e questo dipende da quanto è lungo il file...


    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include<string.h>
    
    
    int main(int argc, char *argv[])
    {
      char s[2000],line[100];  
      FILE *f=NULL;
      f=fopen("prova.txt","r");
      if(f==NULL)
      {
          perror("Apertura file non riuscita\n");
          getchar();
          return ;
          
      }    
      while(fgets(line,100,f)!=NULL)//Leggo una riga da file
      {
          strcat(s,line);//Concateno la riga letta all'array s
                         // compreso il carattere newline nuova riga 
      }                  // provvedere a toglierlo se non lo si vuole  line[strlen(line)-1]=0;
      puts(s);//stampo tutto il file
      getchar();
      return 0;
    }
    Tecnologia

  3. #3
    Quote Originariamente inviata da torn24 Visualizza il messaggio
    Io userei la funzione strcat()
    per carità, non rendere O(n^2) operazioni che sarebbero O(n) strcat non è praticamente mai la risposta.

    @LuigiDaddario: il metodo "classico" per leggere un intero file in memoria (se stai leggendo un file di cui si può fare il seek) consiste i qualcosa del genere:
    codice:
    FILE *fp=fopen("file.txt", "rb");
    if(!fp) {
        // errore di apertura file
    }
    // Vado in fondo al file
    fseek(fp, 0, SEEK_END);
    // Mi faccio dire la posizione a cui sono (=> ottengo così le dimensioni del file)
    size_t sz = ftell(fp);
    // Alloco la memoria necessaria
    char *s = malloc(s);
    if(!s) {
        // errore allocazione
    }
    // Leggo i dati
    if(fread(fp, 1, sz, s)!=sz) {
        // errore lettura
    }
    // ... qui faccio le cose ...
    // libero la memoria
    free(s);
    Se invece il file che vai a leggere non fosse seekabile (come i file aperti in modalità testo su Windows, o le pipe o altri "file speciali" su Linux), il sistema classico consiste nel leggere a blocchi e riallocare man mano che si legge (tipicamente si va al raddoppio, in modo da raggiungere le dimensioni finali in tempo logaritmico).
    Ultima modifica di MItaly; 26-05-2015 a 01:18
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    "per carità" adesso che conosco un metodo migliore userò questo
    Tecnologia

  5. #5
    Quote Originariamente inviata da torn24 Visualizza il messaggio
    "per carità" adesso che conosco un metodo migliore userò questo
    Sì, ma hai capito perché strcat è Male?
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Sì, ma hai capito perché strcat è Male?
    Da quello che mi hai detto ho concluso che è meno efficiente, e usa più risorse e tempo di altri sistemi, ma purtroppo non so distinguere tra due soluzioni quale sia la più efficiente
    Tecnologia

  7. #7
    Quote Originariamente inviata da torn24 Visualizza il messaggio
    Da quello che mi hai detto ho concluso che è meno efficiente, e usa più risorse e tempo di altri sistemi, ma purtroppo non so distinguere tra due soluzioni quale sia la più efficiente
    Il punto è che se sai come lavora strcat dovrebbe essere evidente...
    Leggi: http://www.joelonsoftware.com/articl...000000319.html
    Amaro C++, il gusto pieno dell'undefined behavior.

Tag per questa discussione

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.