cannot convert from ´void *´ to ´char *´

01/06/2006

1

[color=red:cd50f70243]Título editado por Massuda Por favor, leia as [url=http://forum.clubedelphi.net/viewtopic.php?t=6689]Regras de Conduta[/url] do fórum, em especial o item 1.e[/color:cd50f70243]
to com esse sguinte codigo pessoal
#include <stdio.h>
include <stdlib.h>
include <string.h>

//
// retorna != 0 se o valor passado
// e´ uma vogal
//
int vogal(char c)
{

char *v="AaEeIiOoUu";

while(*v) if(*v++==c) return true;
return false;

}

//
// detecta as sequencias de nao-vogais
// e defaz as trocas
//
void troca(char *msg, int *i)
{

int j, t;
char aux;

j=*i;
t=0;
while(msg[j]&&!vogal(msg[j++])) t++;

switch(t)
{

case 2: // 2 nao-vogais contiguas
aux=msg[*i];
msg[*i]=msg[*i+1];
msg[*i+1]=aux;
(*i)+=2;
break;

case 3: // 3 nao-vogais contiguas
aux=msg[*i];
msg[*i]=msg[*i+2];
msg[*i+2]=aux;
(*i)+=3;
break;

case 4: // 4 nao-vogais contiguas
aux=msg[*i];
msg[*i]=msg[*i+3];
msg[*i+3]=aux;
aux=msg[*i+1];
msg[*i+1]=msg[*i+2];
msg[*i+2]=aux;
(*i)+=4;
break;

}

}

void main()
{

int k, j, t;
char aux, *msg;

msg=malloc(80);

printf("Digite a mensagem codificada:\n>> ");
gets(msg);

t=strlen(msg);

k=0;
j=t-1;

// reverte a string...
while(j>k)
{
aux=msg[k];
msg[k]=msg[j];
msg[j]=aux;
k++;
j--;
}

// desfaz as trocas nao-vogais...
for(k=0; k<t; k++) troca(msg, &k);

printf("\nMensagem decodificada:\n>> ¬s", msg);

// pause
getch();

} 

dah sempre esse erro maldito
error C2440: ´=´ : cannot convert from ´void *´ to ´char *´
Conversion from ´void*´ to pointer to non-´void´ requires an explicit cast

Alguem sabe o q devo modificar no codigo jah foi um sacrificio eu fazer ainda dar esses erros num sei mais em q mecher.
[color=darkred:cd50f70243][/color:cd50f70243]


Responder

Posts

01/06/2006

Feswood

PS.: esse erro da na lina do msg=malloc(80); sei lah o q tah avendo tentei bibliotecas e nda Ajuda!!!!!!


Responder

01/06/2006

Massuda

O compilador está avisando que não pode converter void* para char* sem que você peça explicitamente para você fazer isso. Note que malloc() retorna void* e você quer atribuir esse void* para o msg que é char*.

Para fazer isso explicitamente, escreva...
msg = (char*) malloc(80);
...essa conversão explícita é chamada de [b:4d7f8960f9]typecast[/b:4d7f8960f9] ou [b:4d7f8960f9]casting[/b:4d7f8960f9].


Responder

01/06/2006

Feswood

Valew desculpa se postei no lugar errado e tals prometo q naum fço mais isso.

Obrigado pela ajuda tb cara eu num penssei nisso :D , mais esse código está feito dinamicamente ou estaticamente?? essa eh outra duvida q tenho pq meu irmão fla q tah dinamicamente, meus colegas da facu flam q estah estaticamente afinal tá o q? dinamica ou estatica?


Responder

01/06/2006

Massuda

...mais esse código está feito dinamicamente ou estaticamente?? essa eh outra duvida q tenho pq meu irmão fla q tah dinamicamente, meus colegas da facu flam q estah estaticamente afinal tá o q? dinamica ou estatica?
Você está falando de alocação de memória?

No caso, msg está sendo alocada dinamicamente usando malloc(). Uma alocação estática seria...
char msg[80];


Aliás, percebi outro problema... sempre que você aloca memória com malloc(), não se esqueça de liberar a memória alocada usando free(). No caso, o problema não é grave porque você aloca uma única vez memória e depois o programa termina (o Windows gentilmente irá liberar a memória que você alocou quando o programa termina), mas imagine essa alocação dentro de uma função executada milhares de vezes.


Responder

01/06/2006

Feswood

tem razão, mais pro código ficar com um aspecto mais sério até mesmo porque me tirou o sono muitas noites não custa nada usar o free() agradeço desde já sua ajuda e se quiser considerar o tópico encerrado sinta-se a vontade.


Responder

01/06/2006

Feswood

E se por exemplo quisesse colocar neste codigo uma Struct que não definisse um tamanho exato no malloc?


Aguardo respostas pois cheguei e estamos tentando porém sempre dá varios erros por favor ajuda


Responder

01/06/2006

Massuda

E se por exemplo quisesse colocar neste codigo uma Struct que não definisse um tamanho exato no malloc?
Não entendi o que você quis dizer com ´não definisse um tamanho exato´... o tamanho de um struct pode ser obtido usando [url=http://ead1.eee.ufmg.br/cursos/C/aulas/cb50.html]sizeof()[/url].


Responder

01/06/2006

Feswood

Nem sei como agradecer a mão q vc tah me dando massuda a questão é o seguinte a questão pede para descriptografar uma certa mensagem só q eu devo usar lista, uma struct e malloc com o size of so q companheiro o maximo q sabia era o malloc agora struct e size of eh um mar d duvidas massuda se tiver tempo de me ajudar eh q são tantas duvidas q eu mesmo tentei fazer a struct Nó soh q jah dei uns 15 erros sou amador to precisando mesmo valew


Responder

02/06/2006

Massuda

Alguns links para você dar uma lida...

struct: [url=http://ead1.eee.ufmg.br/cursos/C/aulas/cb10.html]clique aqui[/url]
sizeof: [url=http://ead1.eee.ufmg.br/cursos/C/aulas/cb50.html]clique aqui[/url]

Esses links são trechos de uma excelente apostila de C do curso de Engenharia Elétrica da UFMG [url=http://ead1.eee.ufmg.br/cursos/C/c.html]cliqeu aqui[/url].


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira