1
resposta

[Dúvida] [Error] Invalid Conversion from 'void' to 'char**' [-fpermissive] || a value of type "void *" cannot be assigned to an entity of type "char *"

#include <stdio.h> #include <stdlib.h> #include <string.h>

char **mapa; int linhas; int colunas;

int main() {

FILE *f;

f = fopen("mapa_jogo.txt", "r");
if (f == 0)
{
    printf("Erro na leitura do mapa\n");
    exit(1);
}

fscanf(f, "%d %d", &linhas, &colunas);
printf("linhas %d colunas %d", linhas, colunas);

mapa = malloc(sizeof(char *) * linhas);

for (int i = 0; i < linhas; i++)
{
    mapa[i] = malloc(sizeof(char) * colunas);
}

for (int i = 0; i < linhas; i++)
{

    fscanf(f, "%s", mapa[i]); // le a string do arquivo e armazena na linha do mapa // le a linha inteira e armazena
}
/*
    for (int i = 0; i < NUM_LINHAS; i++) // percorre a linha
    {
        for (int j = 0; j < NUM_COLUNAS; j++) // percorre a coluna
        {
            printf("%c", mapa[i][j]); // imprime o caractere da linha e da coluna
        }
        printf("\n"); // da enter nas linhas
    }
*/
for (int i = 0; i < linhas; i++) // percorrendo as linhas na matriz
{

    printf("%s\n", mapa[i]); // imprime direto 5 vezes a string inteira
}

fclose(f);

for (int i = 0; i < linhas; i++)
{
    free(mapa[i]);
}

free(mapa);

} Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Olá, Henrique!

Pelo código que você compartilhou, o erro "Invalid Conversion from 'void' to 'char**' [-fpermissive]" ocorre na linha onde você faz a alocação de memória para a variável 'mapa'. Isso acontece porque você está utilizando a função 'malloc', que retorna um ponteiro void, e tentando atribuir esse valor a um ponteiro de ponteiro de char.

Uma possível solução para esse problema é fazer um cast do retorno da função 'malloc' para o tipo correto. Ficaria assim:

mapa = (char **)malloc(sizeof(char *) * linhas);

Dessa forma, você estará informando ao compilador que o ponteiro retornado pela função 'malloc' é do tipo 'char **'.

Espero que isso resolva o erro que você está enfrentando. Se tiver mais alguma dúvida, é só me dizer!

Espero ter ajudado e bons estudos!