Ir ao conteúdo
  • Cadastre-se
Clid Saniny

Erro deprecated conversion from string constant to 'char*'

Recommended Posts

 


#include<stdio.h>
#include<stdlib.h>
/* Prototipos de funcao */ 
FILE * AbrirArquivo(char caminho[], char modo);
void FecharArquivo(FILE *arquivo);
void ApresentarMenu();
void EscolherOpcao(char opcao);
void Encerrar();
void TexteEncerrar();
void Cadastrar();
void Listar();
//-----------------------------------------------------------------------------------

FILE *AbrirArquivo(char caminho[], char modo)
    {
        FILE *arquivo;
        
        switch(modo)
            {
                case 'G': 
                    arquivo = fopen(caminho, "wt");
                    break;
                case 'L': 
                    arquivo = fopen(caminho, "rt");
                    break;
                case 'A': 
                    arquivo = fopen(caminho, "a");
                    break;
                default: printf("\nCarater invalido\n");
            }
        
        if(arquivo == NULL)
            {
                printf("\nNao foi possivel abrir o arquivo %s\n", caminho);
                exit(0);
            }
        
        return arquivo;
    }
void TexteEncerrar()
{
        int opcao;
        
        system("cls");
        printf("\n\t\t| *********************  Software de cadastros e pesquisas  ****************** |\n");
        printf("\t\t|------------------------------------------------------------------------------|\n");
        printf("\t\t| Tens certeza que queres encerrar o soft?             ------------------------|\n");
        printf("\t\t| SIM[1] - NAO[2]                                      ------------------------|\n");
        printf("\t\t|------------------------------------------------------------------------------|\n");
        printf("\t\t|-------- Opcao: | ");
        
        switch(opcao)
            {
                case 1: Encerrar();
                
                case 2: ApresentarMenu();
                
                default:     system("cls");
                            printf("\n\nOpcao Invalida. Tente Novamente!!\n\n");
                            TexteEncerrar();
            }
}
void Encerrar()
    {

        system("cls");        
        printf("\n\t\t| *********************  Software de cadastros e pesquisas  ****************** |\n");
        printf("\t\t|------------------------------------------------------------------------------|\n");
        printf("\t\t|------------------------------------------------------------------------------|\n");
        printf("\t\t|     *****************        SOFTWARE ENCERRADO         ****************     |\n");
        printf("\t\t|------------------------------------------------------------------------------|\n");
        printf("\t\t|------------------------------------------------------------------------------|\n");
        
        exit(0);
        
        system("pause");
    }
void FecharArquivo(FILE *arquivo)
    {
        fclose(arquivo);
    }

void ApresentarMenu()
    {
        int opcao;
        
        system("cls");
        
        printf("\n\t\t| *********************  Software de cadastros e pesquisas  ****************** |\n");
        printf("\t\t|------------------------------------------------------------------------------|\n");
        
        printf("\t| Opcao |________________ Menu _______________|\n");
        printf("\t|\t|------------------------------------------------------------------------------|\n");
        printf("\t| 1 >>> | --- Cadastrar Nomes e Telefones --- |");
        printf("\n\t| 2 >>> | --- Pesquisar Nomes e Telefones --- |");
        printf("\n\t| 3 >>> | --- Presentar Nomes e Telefones --- |");
        printf("\n\t| 4 >>> | --- Encerrar Software ------------- |\n\t--------\n Opcao: | ");
        scanf("%d", &opcao);

        
        EscolherOpcao(opcao);
    }

void EscolherOpcao(int opcao)
    {
    
        switch(opcao)
            {
                case 1: 
                    Cadastrar();
                    break;
                    //-----
                case 2:
                    
                    break;
                    //-----
                case 3:
                        Listar();
                    break;
                    //-----
                case 4: TexteEncerrar();
                    break;
                    //---------
                default: ApresentarMenu();
            }
    }
 
void Cadastrar()
    {
        FILE *arquivo;
        char Nome[100];
        int Telefone;
        char CaminhoArquivo[100] = "C:\\Dados\\Telefones.txt";
        
        fflush(stdin);
        
        printf("\nNome: ");
            gets(Nome);
        printf("\nTelefone: ");
            scanf("%d", &Telefone);
            
        arquivo = AbrirArquivo("CaminhoArquivo", 'A');
            
            fprintf(arquivo, "%s - %d\n", &Nome, &Telefone);
            
            printf("\nDados Gravados com sucesso!!\n\n");
            system("pause");
        FecharArquivo(arquivo);
        
        ApresentarMenu();
    }
 
void Listar()
    {
        FILE *arquivo;
        
        char Nome[100];
        int Telefone;
        
        arquivo = AbrirArquivo("C:\\Dados\\Telefones.txt", 'L');
        
        
        
        system("cls");
        
        while(!feof(arquivo))
            {
                fscanf(arquivo, "%s - %d ", &Nome, &Telefone);
                printf("\nNome: %s :: Telefone: %d\n", Nome, Telefone);
            }
    }
 main()
    {
        ApresentarMenu();
        system("cls");
        printf("\n\n Saido \n\n");
    
    }

Sem título.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso ta acontecendo porque você ta compilando em um arquivo .cpp. Em C++ esta totalmente desaconselhado o uso de char* para strings, porém trata-se somente de um aviso. Para contornar esse aviso você precisa passar o parâmetro informando explicitamente que se trata de um char*, isso quer dizer que você tem seu programa absolutamente baixo controle ainda usando métodos pouco "ortodoxos". >_<

O seguinte programa da o mesmo aviso que o seu:
 

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

FILE *AbrirArquivo ( char* caminho, char modo ) {
    FILE *arquivo;
    
    switch ( modo ) {
        case 'G':
            arquivo = fopen ( caminho, "wt" );
            break;
            
        case 'L':
            arquivo = fopen ( caminho, "rt" );
            break;
            
        case 'A':
            arquivo = fopen ( caminho, "a" );
            break;
            
        default: printf ( "\nCarater invalido\n" );
    }
    
    if ( arquivo == NULL ) {
        perror("Erro al abrir arquivo: ");
        exit ( 0 );
    }
    
    return arquivo;
}

int main() {
    char* CaminhoArquivo = "C:\\Dados\\Telefones.txt";
    char modo = 'L';
    FILE* arquivo = AbrirArquivo( CaminhoArquivo, modo );
    
    free(arquivo);
    return 0;
}


porém aqui a solução para evitar esse erro:
 

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

FILE *AbrirArquivo ( const char* caminho, char modo ) {
    FILE *arquivo;
    
    switch ( modo ) {
        case 'G':
            arquivo = fopen ( caminho, "wt" );
            break;
            
        case 'L':
            arquivo = fopen ( caminho, "rt" );
            break;
            
        case 'A':
            arquivo = fopen ( caminho, "a" );
            break;
            
        default: printf ( "\nCarater invalido\n" );
    }
    
    if ( arquivo == NULL ) {
        perror("Erro al abrir arquivo: ");
        exit ( 0 );
    }
    
    return arquivo;
}

int main() {
    const char* CaminhoArquivo = "C:\\Dados\\Telefones.txt";
    char modo = 'L';
    FILE* arquivo = AbrirArquivo( (const char*)CaminhoArquivo, modo );
    
    free(arquivo);
    return 0;
}


Como vemos, tanto declarando CaminhoArquivo como o parametro caminho como const char* ambos e forçando o cast (const char*)CaminhoArquivo explicitamente o aviso simplesmente desapareceu.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×