Ir para conteúdo
Fórum Script Brasil
  • 0

Problema com malloc e vetor no sprintf


carol15mg

Pergunta

Boa noite, sou nova na programação em c++ e estou tendo uns probleminhas de dificuldade fácil. (pra vocês que já dominam). 😄

Bem, é o seguinte estou fazendo uma função que verifica os arquivos de uma determinada pasta, e pega os nomes dos mesmos e adiciona em um array. bom até ai tudo tranquilo.

eu cheguei a fazer sem problemas o codigo, inclusive, funcionando perfeitamente. porem meu professor pediu que usasse um array dinamico. e ai que começou os problemas.

para fazer esse array (vetor) eu usei a função malloc, porem aparece alguns erros no decorrer do codigo. e é ai que gostaria de ajuda de vocês.

em principal esses erros abaixo:

listdir.cpp|44|error: invalid conversion from 'char' to 'char*' [-fpermissive]|
stdio.h|295|note:   initializing argument 1 of 'int sprintf(char*, const char*, ...)'|
listdir.cpp|56|error: invalid conversion from 'char' to 'const char*' [-fpermissive]|
string.h|49|note:   initializing argument 1 of 'size_t strlen(const char*)'|
listdir.cpp|57|error: invalid conversion from 'char' to 'char*' [-fpermissive]|
listdir.cpp|5|note:   initializing argument 1 of 'void verificarPalavra(char*, char*)'|

tentei fazer a conversão usando em todos os erros que deu a seguir, ai o programa compila, mas da erro ao executar e fecha. 🙁

(char *) vetor(mark)

abaixo segue o código da parte que esta dando erro.

// essa parte faz a leitura dos nomes na pasta e adiciona o nome dos arquivos em "vetor[]"
while ( ( lsdir = readdir(dir) ) != NULL )
    {
    	sprintf(vetor[mark],"%s\n",lsdir->d_name); // linha 44: erro aqui.
    	mark++;
    }

//---- erro linha 56. essa parte faz uma verificação dentro do vetor para procuar tal arquivo/pasta. exemplo: supondo que em vetor[] tem uma pasta chamada "teste" ele percorre o vetor até encontrar, caso não encontre avisa que não tem esse arquivo.
  	for(int a = 0; a <= mark; a++){
		  if(strlen(vetor[a])>9){ // linha 56 erro: listdir.cpp|56|error: invalid conversion from 'char' to 'const char*' [-fpermissive]|
		  	verificarPalavra(vetor[a],palavra); // aqui também da erro: listdir.cpp|57|error: invalid conversion from 'char' to 'char*' [-fpermissive]|
		  	printf("%s,n%ld",vetor[a],TamanhoDoVetor); // aqui tb
		  }

	}

na função malloc eu fiz:

 

vetor = (char*) malloc (sizeof(char));

e as variáveis:

char *vetor;
int mark = 0;

Se puderem dar uma forcinha, fico muito grata. obrigada.

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

A quem possa interessar,

 

Eu resolvi o problema. acontece que eu estava usando um vetor simples, e não uma matriz. pesquisando na net encontrei o seguinte para criar uma matriz:

	char **vetor; // criar um char do tipo ponteiro de matriz

	vetor = (char**) malloc( sizeof(char*) * pLinha ); // aloca as linhas do vetor 
	for(int i =0; i < pLinha; i++)
	{
		vetor[i] = (char*) malloc(sizeof(char)* pColuna); // e aqui usando for, aloca as colunas do vetor.
	}

depois é só usar como um vetor normal.

Obrigada assim mesmo, mesmo que não tenha conseguido ajuda aqui.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá. Apenas uma dica: Não há necessidade do casting explícito para a função malloc. É desnecessário e induz ao erro. 

Seu código ficaria assim:

char **vetor = NULL; // criar um char do tipo ponteiro de matriz // Inicia o ponteiro com o valor NULL

vetor = malloc( sizeof(char*) * pLinha ); // aloca as linhas do vetor 

for (int i = 0; i < pLinha; i++)
{
    vetor[i] = malloc(sizeof(char) * pColuna); // e aqui usando for, aloca as colunas do vetor.
}

E, para liberar a memória q foi alocada:

for (int i = 0; i < pLinha; i++) 
{
    free(vetor[i]);  // libera primeiro as 2ª dimensão 
}	

free(vetor); // libera o ponteiro
	
vetor = NULL; // faz o ponteiro voltar a apontantar para NULL (lugar nenhum)

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...