Ir ao conteúdo
  • Cadastre-se

C Erro de [Warning] deprecated conversion from string constant to 'char*


Thales Muchante

Posts recomendados

#include <stdio.h>
#include <stdbool.h>
int main(void)
{
_Bool funcao(char string[],char string2[]);	

if (funcao("xbox","xbox"))
	printf("As duas palavras sao iguais");
else printf("As palavras sao diferentes");

}
_Bool funcao(char string[],char string2[]){
	
	int s1=0;
	
	while (string[s1]==string2[s1] && string[s1] != '\0' && string2[s1] != '\0')
	s1++;
	
	if(string[s1]=='\0' && string2[s1]=='\0')
	return 1;
	
	else return 0;
	
	
}

Boa jovens , estou querendo uma ajuda bem simples , estou inserindo este código no dev c++ e ele me acusa esse seguinte erro : C:\Users\tmuch\Documents\racun.cpp    [Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings] ................ porém quando compilo está 100% funcional e também no codeBlock ele funciona DBoas qual seria o meu erro ???? GRATO PELA ATENÇÃO !

Link para o comentário
Compartilhar em outros sites

Um Warning em realidade não é um erro e sim um "Aviso". O mesmo ja diz que a conversão é "deprecated" ou o que é a mesma coisa, "desaconselhável". Por tanto seu código não tem erros realmente. Ou sim?

Todo o problema vem a causa que você esta mandando uma string literal(string constant) para um ponteiro a char(char*). Que acontece se nessa função inconscientemente você tentasse mudar essa literal? Ja entendeu por que é desaconselhável, e ja entendeu porque funciona sem erros aparentes? Porque você não ta tentando mudar essa string, somente está usando a modo de "consulta".

O erro é devido a que o programa acha que você não tem o controle, é como si fosse disparar dardos no escuro tentando acertar um alvo que não ta vendo, devido "conversões implícitas", que possivelmente, você "não saiba" no fundo, o que acontece.

Como eliminar o warning? Fácil! Indique que não há nenhum erro, que o que você quer realizar é isso mesmo, faça o cast de forma "explicita".
Nessa linha:
if (funcao("xbox","xbox"))
mude para
if (funcao((char*)"xbox",(char*)"xbox"))

Ou declare "xbox" como um vetor e passe-o normalmente. Fazendo isso você garante que "xbox" possa ser mudada, sempre e quando tiver espaço, então não terá mais erros >_<.

Saiba que isso é perfeitamente legal em C, por isso se trata de um aviso. Um aviso somente quer lhe advertir que seu programa pode não funcionar como você quer, o que não se trata disso neste caso, mas pode acontecer. Valeu!?

Fui!

  • Amei 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!