Visualizzazione dei risultati da 1 a 7 su 7

Visualizzazione discussione

  1. #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.

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