Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++]zamienia const char* na char*

Ostatnio zmodyfikowano 2018-02-04 13:28
Autor Wiadomość
znyk
Temat założony przez niniejszego użytkownika
[C++]zamienia const char* na char*
» 2018-02-03 17:13:29
Przeniosłem program napisany w borland c++ na dev c++ i w czasie kompilacji mam błąd:

[Warning] deprecated conversion from string constant to 'char*' [-Wwrite-strings]

dotyczy on linijki:

outtextxy(185,30,"SCHEMAT SIECI NEURONOWEJ");

W czym tkwi problem ?
P-169213
jankowalski25
» 2018-02-03 17:38:22
Próbujesz zamienić
const char *
 na
char *
, co może być błędem. Jeśli funkcja
outtextxy()
 nie modyfikuje podawanego napisu, to można użyć
const_cast
. A jak chcesz zrobić to bezpiecznie, to przypisz ten łańcuch znaków na przykład do
char[]
.

Dopisano:
Zmień nazwę tematu. Treść ostrzeżenia jest tutaj ważniejsza niż to, że zmieniasz IDE.
P-169215
znyk
Temat założony przez niniejszego użytkownika
» 2018-02-04 11:29:42
Zrobiłem przykładowy programik z const_cast:


#include <iostream>
#include <graphics.h>
#include <string.h>
using namespace std;

int main()
{
string text="marcin";

int gd,gm;
gd=DETECT;
 initgraph(&gd,&gm,NULL);  
  outtext(const_cast<char*>(text.c_str()));
  delay(5000);
  closegraph();
}

i działa tylko w programie mam dużo razy użyte outtext, jestem dopiero początkujący w kodowaniu i nie mam pomysłu jak to uprościć, czy za każdym razem mam przypisywać tekst do zmiennej łańcuchowej ?

Już sobie poradziłem zadeklarowałem zmienną globalną i działa.
P-169224
jankowalski25
» 2018-02-04 13:28:41
Prosty program pokazujący problem:
C/C++
#include <iostream>

void funkcja( char * napis )
{
    std::cout << napis;
}

int main()
{
    funkcja( "Hello world" );
}

Najprostsze bezpieczne rozwiązanie:
C/C++
char hello[] = "Hello world";
funkcja( hello );

Coś bardziej uniwersalnego, z dynamiczną alokacją pamięci:
C/C++
#include <cstring>

void moja_funkcja( const char * napis )
{
    std::size_t rozmiar = std::strlen( napis );
    char * dane = new char[ rozmiar + 1 ];
    std::strcpy( dane, napis );
    funkcja( dane );
    delete[] dane;
}

int main()
{
    moja_funkcja( "Hello world" );
}

zadeklarowałem zmienną globalną i działa
Zwykle powinno się unikać zmiennych globalnych, jeśli się da.
P-169225
« 1 »
  Strona 1 z 1