Ir para conteúdo

Arquivado

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

lucasseribeiro

deprecated conversion : alguém me dá uma luz

Recommended Posts

Pessoal,

 

eu tô tentando desenvolver um esquema de registros de agenda em forma de string em C++.

 

Então, criei uma funçãozinha e falei: bão, vamos pegar o comprimento da string na base do for, né...

 

Aí, quando eu executo o projeto abaixo, recebo aquele warning do "deprecated conversion" e não

recebo o número 12 que é o lorem ipsum na main()...

 

Que sintaxe eu deveria usar para o compilador responder o comprimento da string inserida?

Gostaria de usar só bibliotecas nativas se possível...

 

Eis os arquivos:

 

oficina.cpp com a função main()...

#include <iostream>
#include <stdio.h>
#include <agenda.h>

using namespace std;

int main(){
    registro("lorem_ipsum ");
    return(0);
}

agenda.h setando a função registro(...), que fabricará a string de registro [data - hora : texto] a partir do dados inseridos...

void registro(char string[]);

E o arquivo agenda.cpp

#include <iostream>
#include <stdio.h>
#include <agenda.h>
#include <string>

using namespace std;

void registro(char string[1000]){
    int i = 0;
    for(i = 0; string[i]!='\0'; i++){}; // Aqui o loop
    cout << i;
}

Mas, quando eu executo o projeto, recebo o seguinte warning:

 


deprecated conversion from string constant to ‘char*’

 

e o 12 que é bom, nada!!

 

 

Grato

Lucas Ribeiro

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se está usando C++, por que stdio.h? Isso é cabeçalho de C. E se quisesse usar scanf/printf (e outras do stdio.h do C), o cabeçalho correto é cstdio.


isis@linux:~/src/imasters> g++ -std=c11 -Wall -Wextra oficina.cpp -I .
cc1plus: warning: command line option ‘-std=c11’ is valid for C/ObjC but not for C++ [enabled by default]
oficina.cpp: In function ‘int main()’:
oficina.cpp:4:28: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
registro("lorem_ipsum ");
^
/tmp/ccncq7K3.o: In function `main':
oficina.cpp:(.text+0x11): undefined reference to `registro(char*)'
collect2: error: ld returned 1 exit status

 


-Wwrite-strings
When compiling C, give string constants the type "const char[length]" so that copying the address of one into a non-"const" "char *" pointer produces a warning. These warnings help you find at compile time code that can try to write into a string constant, but only if you have been very careful about using "const" in declarations and prototypes. Otherwise, it is just a nuisance. This is why we did not make -Wall request these warnings.
When compiling C++, warn about the deprecated conversion from string literals to "char *". This warning is enabled by default for C++ programs.


Sugiro que procure a documentação do compilador p/ esclarecer as mensagens de erro.

P/ a classe string utiliza-se o size do objeto (
http://en.cppreference.com/w/cpp/string/basic_string). P/ char * usa-se a função strlen.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa mensagem de aviso aparece durante a compilação, não durante a execução.
A execução do programa exibiu o tamanho corretamente.

 

 

isis@linux:~/src/imasters> g++ oficina.cpp agenda.cpp -Wall -Wextra -I .

oficina.cpp: In function ‘int main()’:
oficina.cpp:7:28: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
registro("lorem_ipsum ");
^
isis@linux:~/src/imasters> ./a.out
12

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.