• 0
Sign in to follow this  
carol15mg

Problema com malloc e vetor no sprintf

Question

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.

Share this post


Link to post
Share on other sites

2 answers to this question

Recommended Posts

  • 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.

Share this post


Link to post
Share on other sites
  • 0
Guest

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)

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this