Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [C] Problemi malloc()

  1. #1

    Problemi malloc()

    Salve gente .. dovrei creare un vettore di stringhe .. le stringhe vengono inserite da tastiera .. credo di dover usare malloc() ma ho qualche problema.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char *s[5];
        int i;
        int j;
        
       for(i=0; i<5; i++)
       {
        s[i]= malloc(5*sizeof(char *));
        printf("inserisci una stringa: ");
        scanf("%s" , &s[i]);
        
        }
        
        for(j=0; j<5; j++){
        
        printf("%s, " , (s+j));
        }
        
        
        return 0;
    }
    questo è l'output da terminale .. quando stampo le stringhe che inserisco .. alcune non sono uguali .. qual è secondo voi il problema .. vi ringraizo Daniele

    macbook************$ ./puntatori
    inserisci una stringa: d
    inserisci una stringa: da
    inserisci una stringa: dan
    inserisci una stringa: dani
    inserisci una stringa: danie
    d, da, dan, danidanif, danif,

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Regolamento...

    punto 2: Indicare il linguaggio di programmazione nel titolo

    punto 6:

    Formattazione del codice sorgente.
    Quando incollate una porzione di codice all'interno di un messaggio, utilizzate l'apposito tag

    [CODE]
    codice
    [/CODE]

    che può essere inserito automaticamente premendo il pulsante CODE: questo renderà il codice leggibile e facilmente comprensibile a tutti, agevolando gli utenti che desiderano aiutarvi.
    Ho corretto io.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    nella malloc nel sizeof toglierei il char* e metterei char

    la scanf vuole un puntatore e s[i] è già un puntatore no? non credo serva l'&

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    allora, il char al posto del char* è giusto l'& va bene invece..

  5. #5
    ragazzi .. il problema è sempre lo stesso .. anche se sostituisco char al posto di char * . L'output è sempre lo stesso .. non capisco perchè .. forse non allochiamo abbastanza memoria? L'& all'interno della scanf è fondamentale .. altrimenti non risolve il riferimento. E' molto strano, eppure non arrivo manco a 20 righe di codice vi ringrazio ancora .. daniele

  6. #6
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    I suggerimenti di Stoicenko sono corretti... com'è che non funziona? Al massimo mettici un cast "char *" nella chiamata alla malloc()...

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char *s[5];
        int i, j;
        
       for(i=0; i<5; i++) {
    
        s[i]= (char *) malloc( 5 * sizeof(char) );
        printf("inserisci una stringa: ");
        scanf("%s" , s[i]);
        
        }
        
        for(j=0; j<5; j++){
        
        printf("%s, " , (s+j));
        }
        
        
        return 0;
    }
    Ovviamente tieni presente che se allochi spazio per 5 caratteri, non potrai immettere stringhe che ne abbiano più di 4 (il 5° è riservato al terminatore).

    EDIT: anzi no, c'è un errore.

    codice:
        printf("%s, " , (s+j));
    sostituisci con


    codice:
        printf("%s, " , *(s+j));
    o con


    codice:
        printf("%s, " , s[j]);
    every day above ground is a good one

  7. #7
    ragazzi non mi va ..
    codice:
      printf("%s, " , s[j]);
    o
    codice:
     printf("%s, " , *(s+j));
    mi da un errore di "segmentation fault". Il cast non credo sia il vero problema .. provate a farlo girare voi .. io uso un machintosh e gcc per compilare ... Sono convinto che l'errore è nel ciclo for .. la condizione di uscita dal ciclo. Perche' ho notato che il ciclo termina quando inserisco una parola di 5 lettere .. se inserisco sempre parole di 4 lettere .. il ciclo è infinito! Se invece inserisco solo dei singoli caratteri .. anzi fino a 3 .. l'output è giusto! oddio ..
    grazie ancora per l'aiuto.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Io ho compilato esattamente questo codice:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        char *s[5];
        int i, j;
        
       for(i=0; i<5; i++) {
    
        s[i]= (char *) malloc( 5 * sizeof(char) );
        printf("inserisci una stringa: ");
        scanf("%s" , s[i]);
        
        }
        
        for(j=0; j<5; j++){
        
        printf("%s, " , s[j]);
        }
        
        
        return 0;
    }
    con gcc 4.2.3 su Slackware e con questa esecuzione:

    codice:
    bash-3.1$ ./prova
    inserisci una stringa: cane
    inserisci una stringa: casa
    inserisci una stringa: cosa
    inserisci una stringa: tre
    inserisci una stringa: due
    cane, casa, cosa, tre, due,
    non ho alcun problema.

    Ti ricordo di non immettere stringhe più lunghe di 4 caratteri... a meno che non allochi più spazio.
    every day above ground is a good one

  9. #9
    Risolto .. grazie ragazzi .. il problema era il 5 nella malloc() .. allocavo spazio per stringhe inferiori ai 5 caratteri, l'avevo confuso con i 5 puntatori delle 5 stringhe. Grazie ancora .. gentilissimi!

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.