Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    81

    Array di puntatori a stringhe

    Questa è l'ultima domanda che vi faccio,ve lo giuro..
    voglio semplicemente salvare una serie di stringhe date in input in un unico vettore di puntatori a stringhe.dopodichè stampare le stringhe che avevo dato in ingresso..
    ho provato a fare così:
    codice:
    #include<stdio.h>
    int getline(char []);
    main()
    {
          int i=0,t,len,l=0;
          char line[100];
          char *pp[100];
          while((len=getline(line))>0)
          {
             strcpy(pp[i++],line);
             l++;
          }
          for(t=0;t<l;t++)
               printf("%s\n",pp[t]);
          getch();
    }
    
    int getline(char t[])
    {
        int i,c;
        while((c=getchar())!=EOF && c!='\n')
          t[i++]=c;
          if(c=='\n')
          t[i++]=c;
          t[i]='\0';
          return i;
    }
    Dopo avere dato la prima stringa in input e avere pressato invio il programa esce dall'esecuzione..

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    codice:
    strcpy(pp[i++],line);
    E' sbagliato: presupponi che l'array di puntatori sia già allocato.

    codice:
          while((len=getline(line))>0)
          {
             pp[i++] = (char *)calloc(strlen(line)+1,sizeof(char));
             strcpy(pp[i++],line);
             l++;
          }
    
    //Fine del programma
    
    for (int z = 0; z< i; z++)
    {
        free(pp[z];
    }
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466

    Re: Array di puntatori a stringhe

    Originariamente inviato da maurymg
    Questa è l'ultima domanda che vi faccio,ve lo giuro..
    Non hai ancora chiaro il concetto di puntatore ... spero per te che gli esami non comprendano questo argomento o che non siano vicinissimi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    81
    beh l'esame è domani.......

    cmq in realtà in generale li ho capiti,non rieco a apire xke è così fondamentale allocare la memoria per pp quando lo dichiaro
    char *pp;

    cioè si lo so che non ne ho definito prima la lunghezza,però se analogamente definisco così la sua lungh:
    char pp[100];

    e poi non alloco la memoria...non funziona...cioè mi stampa solo l'ultima stringa inserita tante volte quante sono le stringhe(diverse..) che ho inserito..

  5. #5
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,565
    Ah bene domani hai l'esame...
    A quanto pare non hai capito la differenza tra
    codice:
    char *t;
    char t[];
    char *t[];
    Il primo è un puntatore, e questo lo sai.
    Il secondo è un array, e questo pure lo sai.
    Il terzo è un array di puntatori...vuol dire che in caso di

    codice:
    char *t[10];
    Tu hai 10 puntatori a char nell'array t...quindi

    t[1] -> Primo puntatore a char
    t[2] -> Secondo puntatore a char
    t[3] -> Terzo puntatore a char
    t[4] -> Quarto puntatore a char

    Anche se in un array, sono comunque puntatori e come tu BEN SAI vanno allocati per essere usati.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da maurymg
    beh l'esame è domani.......
    Ahi ... ricorda che un puntatore e' la maniglia di un cassetto, non e' il cassetto ... nella maniglia non ci metti nulla, nel cassetto sì ... se hai la maniglia, devi prima creare il cassetto e attaccarcelo per avere lo spazio da utilizzare ...

    cmq in realtà in generale li ho capiti,non rieco a apire xke è così fondamentale allocare la memoria per pp quando lo dichiaro
    char *pp;
    Ahi ahi ... e meno male che in generale li hai capiti ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    81
    ok grazie a tutti siete stati chiarissimi,adesso posso veramente dire di averli,in generale,capiti..
    e grazie in particolare a oregon,se domani riuscirò a farcela gran parte del merito sarà tuo..

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.