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

    [C] Allocazione dinamica

    Ciao a tutti,

    ho un problema con un acquisizione da file.....

    il file e fatto cosi

    PIPPO
    GIACOMO
    MATTEO

    vorrei riuscire a prendere le varie stringhe con un puntatore a char...

    char * stringa;

    pero quando faccio

    fscanf(filepointer,"%s",stringa);

    il compilatore si blocca (debuggando)

    io credo che si debba allocare della memoria per stringa...ma non conosco a priori le dimensioni dei nomi....
    si potrebbe usare la fgetc(filepointer) e allocare un carattere alla volta chiudendo poi la stringa con un \0?

    qualche suggerimento? passo ai vettori statici?

  2. #2
    È ovvio che si verifichi un errore, perché stringa è un puntatore non inizializzato... secondo me la cosa migliore da fare è dichiarare stringa come un array di dimensioni ragionevoli (diciamo 4 KB) unitamente all'uso "buffer-overflow proof" della fscanf:
    codice:
    char stringa[4096];
    fscanf(filepointer,"%4096s",stringa);
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Originariamente inviato da MItaly
    È ovvio che si verifichi un errore, perché stringa è un puntatore non inizializzato... secondo me la cosa migliore da fare è dichiarare stringa come un array di dimensioni ragionevoli (diciamo 4 KB) unitamente all'uso "buffer-overflow proof" della fscanf:
    codice:
    char stringa[4096];
    fscanf(filepointer,"%4096s",stringa);
    .
    potresti perpiacere spiegarmi l'uso "buffer-overflow proof" della fscanf?

  4. #4
    Era un modo di dire... semplicemente dici alla fscanf di non leggere più di 4095 caratteri, così da non sforare il buffer.
    P.S.: ops... errorino...
    codice:
    char stringa[4096];
    fscanf(filepointer,"%4095s",stringa);
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.