Salve io ho fatto questo codice con il dev-c++:
Mi dice in:
e
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à.
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 */
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à.