CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - c_str ()

c_str ()

dział ogólny

c_str ()

Nowy postprzez bdgieros » czwartek, 24 maja 2012, 00:09

Witam,

Panowie mam problem, właśnie przeszedłem z buildera 5 na studio xe, przeczytałem tutaj na forum, ze nalezy pozmieniac w opcjach directories and conditionals _TCHAR maps to: char i c_str () mial zwracac const char *, ale niestety nie robi tego, nadal c_str () zwraca mi wchar_t *
kod, który chcę uruchomić wygląda tak

KOD cpp:     UKRYJ  
        if (CheckBox1->Checked)
                        plik = fopen ("baza.sql", "rb");
                else
                {
                        if (OpenDialog1->Execute ())
                                plik = fopen ( (OpenDialog1->FileName).c_str (), "rb" );
                }
 


jest to czesc aplikacji, która przenosze na RadXE, a to blad ktory generuje kompilator
KOD cpp:     UKRYJ  
[BCC32 Error] Unit1.cpp(42): E2034 Cannot convert 'wchar_t *' to 'const char *'
  Full parser context
    Unit1.cpp(34): parsing: void _fastcall TForm1::Button1Click(TObject *)


podaję link do tematu, ktory przeczytalem
http://programowanie.cal.pl/forum/viewtopic.php?f=16&t=1098#p7401

edit: oki, poradzilem sobie, ale zobaczcie na tego potwora:

KOD cpp:     UKRYJ  
                if (OpenDialog1->Execute())
           {
                    plik = _wfopen( (OpenDialog1->FileName).c_str (), ((String) "rb").c_str ()) ;

 

do tego musialem uzyc funkcji _wfopen, ktora przyjmuje z powodzeniem wchar_t *
Panowie jak macie cos bardziej eleganckiego, prosze o wrzucenie

Pozdrawiam!
Ostatnio edytowano czwartek, 24 maja 2012, 10:06 przez polymorphism, łącznie edytowano 1 raz
Powód: Używaj znaczników CPP.
Avatar użytkownika
bdgieros
Bladawiec
Bladawiec
 
Posty: 4
Dołączył(a): czwartek, 24 maja 2012, 00:02
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder XE 2010
Gadu Gadu: 0
    Windows 7Firefox

Re: c_str ()

Nowy postprzez polymorphism » czwartek, 24 maja 2012, 10:15

KOD cpp:     UKRYJ  
((String) "rb").c_str ()

Literały znakowe i tekstowe w wersji unikodowej definiujesz poprzez dodanie prefiksa L:
KOD cpp:     UKRYJ  
plik = _wfopen( (OpenDialog1->FileName).c_str (), L"rb") ;


p.s. Czemu używasz strumieni języka C, zamiast użyć strumieni z VCL-a czy nawet standardowego ifstream?
C++ Reference - opis wszystkich klas STL-a i funkcji C.

Za ten post autor polymorphism otrzymał podziękowanie od:
bdgieros
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: c_str ()

Nowy postprzez bdgieros » czwartek, 24 maja 2012, 12:13

Dzieki, dziala, także zauwazyłem, ze na unsigned najlepiej stosowac UIntToStr. A co do strumieni jezyka C to sila przyzwyczajen, ale masz racje, w tych czasach trzeba to zmienic.
Avatar użytkownika
bdgieros
Bladawiec
Bladawiec
 
Posty: 4
Dołączył(a): czwartek, 24 maja 2012, 00:02
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: C++ Builder XE 2010
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości