Risultati da 1 a 13 di 13

Discussione: invalid conversion from 'void*' to 'char*'

  1. #1
    Utente
    Data Registrazione
    16-07-07
    Messaggi
    23
    Mi Piace
    0
    Specifiche del sistema

    Question invalid conversion from 'void*' to 'char*'

    Salve io ho fatto questo codice con il dev-c++:

    Codice:
    /* per la specifica dell'esercizio vedi prima esercitazione 
       autoguidata - es. 1.8 */
    #include <stdio.h>
    #include <stdlib.h>
    #include<string.h>
    #define N 40
    #define MAXLUNG 50
    
    /* ****** dichiarazioni delle funzioni usate ****** */
    void aggiungi (char *v[], char *, int *);
    int ricerca (char *[], int , char *);
    void sostituisci (char *v[], int quante, char * quale, char *conChi);
    void stampaStringhe (char *v[], int quante);
    main(){
     int i, scelta,
         numeroStringhe;      /* per sapere quante stringhe sono nell'array */
     char *stringhe[N],       /* array di N stringhe */ 
           buffer[MAXLUNG+1], buffer2[MAXLUNG+1];
     numeroStringhe=0;   /* inizializzazione del numero di stringhe 
                            presenti nell'array */
     do {
       printf(" -      scegli      -\n");
       printf(" - aggiunta     (1) -\n");
       printf(" - sostituzione (2) -\n");
       printf(" - stampa       (3) -\n");
       printf(" - fine         (0) -\n");
       scanf("%d", &scelta);
       
       switch (scelta) {
         case 1: 
                printf("stringa di al piu' %d caratteri: ", MAXLUNG);
                scanf("%s", buffer);              /*lettura stringa*/
                aggiungi(stringhe, buffer, &numeroStringhe);
                break;
         case 2: 
                printf("stringa da sostituire: ");
                scanf("%s", buffer);              
                printf("stringa con cui sostituirla: ");
                scanf("%s", buffer2);              
            sostituisci(stringhe, numeroStringhe, buffer, buffer2);
                break;
         case 3:
                printf(" - ecco le stringhe\n");
            stampaStringhe(stringhe, numeroStringhe);
                break;
         case 0: 
                printf(" - USCITA DAL PROGRAMMA\n");
                break;
         default: 
                printf(" - opzione sballata\n");
       } /* fine switch */
     } while (scelta!=0);       /* fine do_while*/
     
    printf("\nFINE\n");
    return 0;
    }
    
    /* ************* funzioni usate ********************** */
    /* trova la stringa cercata nell'array v, sapendo che 
    il numero di stringhe presenti in v e' quante 
    restituisce il puntatore alla stringa trovata o NULL */
    int ricerca (char *v[], int quante, char *cercata) {
      int trovata, i;
      
      trovata=0;     /* inizializzazioni */
      
      for (i=0; ((i<quante)&&(!trovata)) ; i++)
        /*se troviamo la stringa in v[i], assegnamo trovata in modo che
          il ciclo si interrompa */
        if (strcmp(v[i],cercata)==0) {
          trovata=1;
        }
    /* se ora i vale quante vuol dire che la ricerca della stringa non ha
    avuto successo (e si restituisce -1);
    se la stringa e' stata trovata, l'ultima iterazione del ciclo ha
    - scoperto che v[i] conteneva la stringa cercata
    - assegnato trovata a 1
    - incrementato i di 1
    poi il ciclo si e' interrotto
    quindi l'indice della stringa cercata e' i-1 */
      if (i==quante)
        return -1;
      else return (i-1);
    } /* fine ricerca */
     
    void aggiungi (char *v[], char *nuova, int*quante) {
      if (*quante>=N)   /* se non c'e' spazio nell'array */
        printf(" - non c'e' spazio nell'array!\n");
      else {
        v[*quante]=malloc(strlen(nuova)+1); /* allocazione stringa */
        if (v[*quante]==NULL)
          printf("problemi in allocazione\n");  
        else {                              /* (se possibile)                  */
           strcpy(v[*quante], nuova);       /* assegnazione stringa aggiunta e */
           *quante += 1;                    /* incremento del numero di stringhe
                           presenti nell'array             */
        } /* fine secondo else */
      } /* fine primo else */ 
    return;
    } /* fine aggiungi */
    
    /* sostituisce la stringa quale con la stringa conChi nell'array v,
    sapendo che ci sono quante stringhe nelle'array */
    void sostituisci (char *v[], int quante, char * quale, char *conChi) {
      int indiceStringa;
      indiceStringa = ricerca(v, quante, quale);
      if (indiceStringa==-1)
        printf("guarda che %s non c'e' ...", quale);
      else {       /* sostituzione */
        free(v[indiceStringa]);   /* prima si libera la memoria occupata
                     dalla stringa che non serve piu' */
        v[indiceStringa] = malloc(strlen(conChi));  /* poi si alloca
                              spazio per la nuova */
                      /* e poi, se non ci sono stati problemi
                      di allocazione, si copia la nuova
                      stringa in sede */
        if (v[indiceStringa]==NULL)
          printf("problemi in allocazione\n");
        else
          strcpy(v[indiceStringa], conChi);
      } /* fine primo else */
    return;
    }
    void stampaStringhe (char *v[], int quante){
      int i;
      for (i=0;i<quante;i++)
        printf("%s\n", v[i]);
    return;
    }
    Mi dice in:
    Codice:
     v[*quante]=malloc(strlen(nuova)+1); /* allocazione stringa */
    e
    Codice:
     v[indiceStringa] = malloc(strlen(conChi));  /* poi si alloca
    invalid conversion from 'void*' to 'char*' che vuol dire? Io mi ci sono sudato a fa sto programma e mi da sto errore?
    Ma stiamo scherzando?
    Grazie a chi mi aiuterà.

  2.  
    Stanco della Pubblicità? Registrati

  3. #2
    Utente
    Data Registrazione
    16-07-07
    Messaggi
    23
    Mi Piace
    0
    Specifiche del sistema

    Predefinito

    ehm....ALLORA????

  4. #3
    Utente Attivo
    Data Registrazione
    17-11-06
    Località
    Latina
    Messaggi
    1,556
    Mi Piace
    0
    Specifiche del sistema

    Talking

    prova così :

    v[*quante]=(char*)malloc(strlen(nuova)+1);

    alcuni compilatori non fanno implicitamente il cast di quello che allochi con malloc al tipo di destinazione (Borland lo fà, Gcc no, ad esempio).


    Intel C2D E2200 + Thermaltake silent tower 112cu (1,3 Kg) / Asus P5B / 2 * 1Gb Corsair CL4 /
    160GB Maxtor SATA 2 + WD Caviar 250GB SATA2/ Point of View 6600GT 256Mb (500-1000 @ 571-1183) / Enermax Pro82+


  5. #4
    Utente
    Data Registrazione
    16-07-07
    Messaggi
    23
    Mi Piace
    0
    Specifiche del sistema

    Predefinito

    e comunque sia vale anche nell'altra istruzioneaggiungere il (char*) ma perchè? Cos'è che non andava....però non è venuto quello che volevo io.
    Ehm perchè volevo fare 2 mini programmi:

    SOSTITUZIONE:

    1) Utente scrive la frase
    2) Utente scrive la parola da cercare
    3) Utente scrive la parola da sostituire a quella cercata
    4) Stampa la sostituzione nuova

    capito?

    TOGLI

    come la sostituzione ma che toglie la parola cercata e quindi farla sparire
    senza lasciare un grande spazio esempio:

    Ciao pinco pallino
    tolgo pinco
    DEVE DIVENTARE Ciao pallino e non Ciao pallino.
    Ok?
    Grazie cordiali saluti

  6. #5
    Utente Attivo
    Data Registrazione
    17-11-06
    Località
    Latina
    Messaggi
    1,556
    Mi Piace
    0
    Specifiche del sistema

    Talking

    come ho scritto prima, la malloc ti alloca un buffer di una certa grandezza, che gli specifichi tu come parametro. Il buffer allocato però non ha un tipo preciso, quindi ti viene restituito come void* (puntatore generico).
    Sta a te convertire il puntatore generico nel tipo che ti serve...

    Si, puoi fare la stessa cosa anche per l' altra istruzione (era sottinteso).

    Per il comportamento del programma non saprei, non ho guardato cosa facesse (sono al lavoro e ogni tanto "stacco un attimo")
    Intel C2D E2200 + Thermaltake silent tower 112cu (1,3 Kg) / Asus P5B / 2 * 1Gb Corsair CL4 /
    160GB Maxtor SATA 2 + WD Caviar 250GB SATA2/ Point of View 6600GT 256Mb (500-1000 @ 571-1183) / Enermax Pro82+


  7. #6
    Utente
    Data Registrazione
    16-07-07
    Messaggi
    23
    Mi Piace
    0
    Specifiche del sistema

    Predefinito

    e non si possono fare due programmini separati?

  8. #7
    Utente Attivo
    Data Registrazione
    17-11-06
    Località
    Latina
    Messaggi
    1,556
    Mi Piace
    0
    Specifiche del sistema

    Talking

    eh?! per cosa? mica ho capito il senso della domanda...

    Ricominciamo, ok?! (eeeh, qui due sono le cose : o sto invecchiando, o c' ho bisogno di ferie)
    Intel C2D E2200 + Thermaltake silent tower 112cu (1,3 Kg) / Asus P5B / 2 * 1Gb Corsair CL4 /
    160GB Maxtor SATA 2 + WD Caviar 250GB SATA2/ Point of View 6600GT 256Mb (500-1000 @ 571-1183) / Enermax Pro82+


  9. #8
    Utente
    Data Registrazione
    16-07-07
    Messaggi
    23
    Mi Piace
    0
    Specifiche del sistema

    Predefinito

    Cioè si possono fare due programmi separati che poi diventeranno funzioni che verranno chiamate ogni volta che l'utente decide se togliere una parola, sostituire una parola e anche aggiungere una parola a una frase digitata inizialmente?

  10. #9
    Utente Attivo
    Data Registrazione
    17-11-06
    Località
    Latina
    Messaggi
    1,556
    Mi Piace
    0
    Specifiche del sistema

    Talking

    si, certo... puoi creare delle funzioni , ognuna che fà una cosa, e le puoi richiamare come vuoi da un menù principale, dove l' utente decide cosa fare...

    I programmi non sono mai scritti tutti in un unica funzione, sarebbe una pazzia... si "spezza" sempre il codice in moduli, ognuno con un compito preciso...

    buon lavoro
    Intel C2D E2200 + Thermaltake silent tower 112cu (1,3 Kg) / Asus P5B / 2 * 1Gb Corsair CL4 /
    160GB Maxtor SATA 2 + WD Caviar 250GB SATA2/ Point of View 6600GT 256Mb (500-1000 @ 571-1183) / Enermax Pro82+


  11. #10
    Utente
    Data Registrazione
    16-07-07
    Messaggi
    23
    Mi Piace
    0
    Specifiche del sistema

    Predefinito

    saresti in grado di farmi una funzione sostituisci che funziona perfettamente? Grazie e togli?

  12. #11
    Utente Attivo
    Data Registrazione
    17-11-06
    Località
    Latina
    Messaggi
    1,556
    Mi Piace
    0
    Specifiche del sistema

    Predefinito

    in grado si, però sono al lavoro, mi manca il tempo... sorry
    Intel C2D E2200 + Thermaltake silent tower 112cu (1,3 Kg) / Asus P5B / 2 * 1Gb Corsair CL4 /
    160GB Maxtor SATA 2 + WD Caviar 250GB SATA2/ Point of View 6600GT 256Mb (500-1000 @ 571-1183) / Enermax Pro82+


  13. #12
    Utente
    Data Registrazione
    16-07-07
    Messaggi
    23
    Mi Piace
    0
    Specifiche del sistema

    Predefinito

    tranquillo perchè se ti interess ti farò vedere il progetto che sto facendo insieme alla mia ragazza. Lei conosce benissimo il visual basic e access...il c gli sta sulle *****!!!! Però mi fa insegnante privato e sexy di questi due linguaggi e io invece sono esperto in ASM e le faccio da insegnante privato e sexy anceh io!!

  14. #13
    Utente Attivo
    Data Registrazione
    17-11-06
    Località
    Latina
    Messaggi
    1,556
    Mi Piace
    0
    Specifiche del sistema

    Talking

    eheh buone "lezioni" allora ...

    E' abbastanza comune l' odio per il C da parte di chi usa il VB ...
    senza offesa per la tua ragazza eh, ma VB è trooooppo entry level...

    - usi le variabili senza dichiararle prima, volendo
    - tutte le variabili sono di tipo "Dim", poi se la vede lui a convertirle
    - non è multithread

    In ambito professionale serve qualcosa di più potente, di solito...

    Però come "palestra" per imparare, senza abituarsi troppo alle comodità che offre, può anche andare...
    Intel C2D E2200 + Thermaltake silent tower 112cu (1,3 Kg) / Asus P5B / 2 * 1Gb Corsair CL4 /
    160GB Maxtor SATA 2 + WD Caviar 250GB SATA2/ Point of View 6600GT 256Mb (500-1000 @ 571-1183) / Enermax Pro82+


  15.  
    Stanco della Pubblicità? Registrati

Informazioni Discussione

Utenti che Stanno Visualizzando Questa Discussione

Ci sono attualmente 1 utenti che stanno visualizzando questa discussione. (0 utenti e 1 ospiti)

Discussioni Simili

  1. Problema Dark Void
    Di Alexbk20 nel forum Giochi per PC
    Risposte: 1
    Ultimo Messaggio: 27-01-2010, 13:21
  2. Invalid Block Address!
    Di franzese nel forum Tastiere, mouse e altri controller
    Risposte: 0
    Ultimo Messaggio: 03-01-2009, 13:52
  3. secondo void queste ram come sono?
    Di Jamarc nel forum Schede Madre e Ram
    Risposte: 13
    Ultimo Messaggio: 05-01-2008, 15:06
  4. Cmos Checksum Invalid
    Di dr.pexquz nel forum Portatili, tablet e PC all-in-one
    Risposte: 4
    Ultimo Messaggio: 20-05-2007, 15:32
  5. Invalid disk system?!?!?!?!?
    Di Blatto nel forum Hard disk, SSD e RAID
    Risposte: 2
    Ultimo Messaggio: 15-03-2007, 18:44

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
⇧ Torna Su