Ir ao conteúdo
  • Cadastre-se

Erro deprecated conversion from string constant to 'char*'


Clid Saniny

Posts recomendados

 


#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

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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