1 di 3 Successivo Ultimo
  1. L'avatar di Katarn KatarnKatarn è offline #1
    26-06-10 20:55

    Ok, è una cazzata, non ne ho dubbi. Ma non colgo dove sia

    Ho un pezzo di codice in un programma che fa esattamente questo:

    Codice:
    #include <stdio.h>
    
    main () {
        
        FILE *stream;
        char *array[2];
       
        stream = fopen("inserirequinomefile", "r");
        fscanf(file, "%s", array[0]);
        printf("%s\n", array[0]);
    
        fclose(file);
    
    }
    Ok. Risultato? Segmentation fault. Nel printf.

    Non riesco a capacitarmi di quale sia il problema. Se invece di un array uso una variabile non c'è problema. Ora, qualcuno sa dirmi dove sta la cazzata?

    Siate buoni, programmo in C da un paio di mesi e basta
    Rispondi con Citazione 

  2. L'avatar di doomersek doomersekdoomersek è offline #2
    26-06-10 20:59

    mmh, quale sarebbe lo scopo del programma?
    Rispondi con Citazione 

  3. The Hermit #3
    26-06-10 21:09

    Potrei dire una vaccata (non ricordo molto il C), però secondo me devi inizializzare l'array quando lo dichiari.
    Rispondi con Citazione 

  4. L'avatar di Katarn KatarnKatarn è offline #4
    26-06-10 21:22

    Citazione doomersek Visualizza Messaggio
    mmh, quale sarebbe lo scopo del programma?
    Il programma è un database, di fondo. Con qualche opzione extra in qua e in là.

    Il frammento deve caricare un file, prendere la prima stringa, passarla al puntatore char che sta in array[0] e stamparla da là.

    @TheHermit: Boh, provo.
    Rispondi con Citazione 

  5. L'avatar di Katarn KatarnKatarn è offline #5
    26-06-10 22:07

    Citazione The Hermit Visualizza Messaggio
    Potrei dire una vaccata (non ricordo molto il C), però secondo me devi inizializzare l'array quando lo dichiari.
    Provato, non risolve .-.
    Rispondi con Citazione 

  6. L'avatar di doomersek doomersekdoomersek è offline #6
    26-06-10 22:36

    non capisco perchè usi un'array di 2 puntatori a char, non puoi fare semplicemente una cosa del genere?
    Codice:
    char stringa[80];   //80 come esempio, mettere la massima lunghezza della stringa
    scanf("%s",stringa);    //sostituire con fscanf
    //printf della stringa
    il problema tuo, mi pare, è che non allochi la memoria per farci stare la stringa
    Rispondi con Citazione 

  7. L'avatar di Katarn KatarnKatarn è offline #7
    26-06-10 23:09

    Citazione doomersek Visualizza Messaggio
    non capisco perchè usi un'array di 2 puntatori a char, non puoi fare semplicemente una cosa del genere?
    Codice:
    char stringa[80];   //80 come esempio, mettere la massima lunghezza della stringa
    scanf("%s",stringa);    //sostituire con fscanf
    //printf della stringa
    il problema tuo, mi pare, è che non allochi la memoria per farci stare la stringa
    Sì, sì, posso farlo. Mi sembrava inutile postare tutto il programma, ho messo solo il pezzo che dà problemi; è un array che conterrà tutta una serie di dati, che mi serve siano organizzati in quel modo per avere accesso facile agli stessi. La dimensione sarà maggiore di due, e sarà (quando mi sarà riuscito di lavorare sul file che contiene i dati .-.) completamente pieno. Questo è giusto il pezzo di codice che non torna.

    Come dovrei allocarla, esattamente? Cioè. Ho un array di puntatori a stringhe. Non dovrebbe bastare dire al puntatore a quale stringa puntare?

    EDIT: Per dire, soluzione senza array sarebbe anche questa:

    Codice:
    #include <stdio.h>
    
    main () {
        
        FILE *stream;
        char *string;
       
        stream = fopen("inserirequinomefile", "r");
        fscanf(file, "%s", string);
        printf("%s\n", string);
    
        fclose(file);
    
    }


    Il fatto è che non capisco perché questo codice funzioni, e quello no. Sto sempre lavorando con puntatori a caratteri .-.
    Rispondi con Citazione 

  8. L'avatar di Iron84 Iron84Iron84 è offline #8
    27-06-10 00:44

    devi allocarle le stringhe eh, non puoi allocare i puntatori e basta..
    Rispondi con Citazione 

  9. L'avatar di devilheart devilheartdevilheart è offline #9
    27-06-10 11:10

    char *array[2]; crea solo un array di puntatori. poi devi farli puntare a qualcosa. topo array[0]=malloc ...
    Rispondi con Citazione 

  10. L'avatar di kurojishi1 kurojishi1kurojishi1 è offline #10
    27-06-10 11:35

    come dice devilheart, in C devi inizializzare la memoria, il puntatore così sai che è un puntatore ad array, ma non sai dove punta devi dargli dello spazio in memoria e allocarlo.
    Rispondi con Citazione 

  11. L'avatar di Katarn KatarnKatarn è offline #11
    27-06-10 18:01

    Citazione Iron84 Visualizza Messaggio
    devi allocarle le stringhe eh, non puoi allocare i puntatori e basta..
    E c'è un motivo per cui funziona se prendo un puntatore a caratteri e gli assegno la stringa?

    Citazione devilheart Visualizza Messaggio
    char *array[2]; crea solo un array di puntatori. poi devi farli puntare a qualcosa. topo array[0]=malloc ...
    Come sopra. Perché con un puntatore semplice non devo allocare niente?

    http://forum.gamesvillage.it/showthr...1#post25211008

    Citazione kurojishi1 Visualizza Messaggio
    come dice devilheart, in C devi inizializzare la memoria, il puntatore così sai che è un puntatore ad array, ma non sai dove punta devi dargli dello spazio in memoria e allocarlo.
    Non gli sto già dicendo dove puntare con lo scanf?
    Rispondi con Citazione 

  12. L'avatar di Iron84 Iron84Iron84 è offline #12
    27-06-10 19:59

    dipende da come sono inizializzati quei puntatori e a cosa vanno a puntare.
    in parole povere, non crasha per culo.

    prima allochi la memoria, poi la usi, tutto qua.
    Rispondi con Citazione 

  13. L'avatar di kurojishi1 kurojishi1kurojishi1 è offline #13
    27-06-10 20:28

    Non gli sto già dicendo dove puntare con lo scanf?
    evidentemente no
    Rispondi con Citazione 

  14. L'avatar di devilheart devilheartdevilheart è offline #14
    28-06-10 09:46

    Citazione Katarn Visualizza Messaggio
    E c'è un motivo per cui funziona se prendo un puntatore a caratteri e gli assegno la stringa?
    se non allochi nulla nell'aera puntata non può funzionare neanche così
    Rispondi con Citazione 

  15. L'avatar di Katarn KatarnKatarn è offline #15
    30-06-10 21:41

    Citazione Iron84 Visualizza Messaggio
    dipende da come sono inizializzati quei puntatori e a cosa vanno a puntare.
    in parole povere, non crasha per culo.

    prima allochi la memoria, poi la usi, tutto qua.
    Citazione kurojishi1 Visualizza Messaggio
    evidentemente no
    Citazione devilheart Visualizza Messaggio
    se non allochi nulla nell'aera puntata non può funzionare neanche così
    A tutti e tre.

    Qualcuno mi sa spiegare, allora, perché il frammento di codice in cui faccio la stessa, identica cosa, ma con un semplice puntatore a caratteri, invece che un array di puntatori a caratteri, funge?

    Ho già postato l'esempio di codice che, compilato, mi funziona senza problemi.

    Probabilmente non mi ero spiegato bene. Quello che non riesco a capire è perché con la semplice variabile funzioni, mentre con l'array non vada.

    Probabilmente non ho chiaro qualche meccanismo, perché non vedo grosse differenze fra i due frammenti

    Non ho allocato memoria in nessuno dei due casi, mi sembra.
    Rispondi con Citazione 

 
1 di 3 Successivo Ultimo