Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

CarlosAdriano

Erro "conflicting types" numa função

Recommended Posts

Olá pessoal, estou fazendo esse programa, que lê um arquivo ini e usa a função pegasecao() para ler uma palavra entre os caracteres "[" e "]" e jogá-la numa string. Só que quando tento compilar dá o seguinte erro [Error] conflicting types for 'pegacomando' na linha 16. Vocês sabem o que esta causando isso ? Abaixo vai o código. Obrigado.

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

int main(void){
	int nv = 0;
	
	FILE *arquivo = fopen("declara.ini", "r");
	if(arquivo == NULL)
		printf("Erro, arquivo de configuração não encontrado");
	char *palavra = pegasecao("declara.ini", '[', ']');
	printf(palavra);
	
	system("pause");
	return 0;
}
char *pegasecao(char *arquivo, char inicio, char fim){//Aqui o problema
	char *comando;
	int i = 0;
	while((char)getc(arquivo)!=inicio);
	while(getc(arquivo)!=-1){
		comando[i] = (char)getc(arquivo);
		i++;
	}
	return comando;		
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 - você não alocou memória antes de atribuir algo ao char *.

 

arquivo.c:24:10: warning: ‘comando’ may be used uninitialized in this function [-Wmaybe-uninitialized]

comando = (char)getc(arquivo);

 

2- se você quer ler o arquivo, tem que passar o FILE * como argumento, e não uma string.

3- se deu erro na abertura do arquivo, termine o programa ao invés de continuar operando em cima de um ponteiro nulo.

4- remova esse system("pause"). Tente usar o /K como argumento do cmd (http://ss64.com/nt/cmd.html)

5- Ao invés de ler caractere por caractere, use fgets p/ ler a linha inteira.

 

 

arquivo.c:10:18: note: previous implicit declaration of ‘pegasecao’ was here

char *palavra = pegasecao("declara.ini", '[', ']');

 

6- Declare o protótipo quando definir a função depois do main.

 

http://www.cplusplus.com/reference/cstring/strcspn/

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

int main(void){
	FILE *arquivo = fopen("declara.ini", "r");
	if(arquivo == NULL) {
		printf("%s\n", strerror(errno));
		return -1;
	}

	char linha[255];
	fgets(linha,255, arquivo);

	int p = strcspn(linha, "]\n"); // Obtém o tamanho da parte do texto que não contém os caracteres especificados no segundo argumento.
	char texto[p];
	strncpy(texto, &linha[1], p-1); // Copia o texto desejado p/ outra variável.
	texto[p-1] = '\0'; // Insere o caractere que indica o término da string.

	printf("%s\n",texto);
	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.