Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

problem sa wchar_t konverzijom

[es] :: C/C++ programiranje :: problem sa wchar_t konverzijom

[ Pregleda: 2272 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

MirzaSila
Sarajevo

Član broj: 28958
Poruke: 162
*.PPPoE-2347.sa.bih.net.ba.

Sajt: www.hosting-directory.co...


Profil

icon problem sa wchar_t konverzijom07.11.2006. u 10:10 - pre 212 meseci
imam problem koji me jako muci.imam ovak code :

using namespace std;
wchar_t* Overwrite,*ProviderName,*ConnectionProperties,*Classes,*SdfFileName;
long int k;

int main(int argc, char*argv[])
{

ProviderName=argv[1];
ConnectionProperties=argv[2];
Classes=argv[3];
SdfFileName=argv[4];
Overwrite=argv[6];
cout<<"argument 1: "<<ProviderName<< endl;
cout<<"argument 2: "<<ConnectionProperties<< endl;
cout<<"argument 3: "<<Classes<< endl;
cout<<"argument 4: "<<SdfFileName<< endl;
cout<<"argument 5: "<< Overwrite<< endl;

i sad kad kompajliram javi mi gresku
error C2440: '=' : cannot convert from 'char *' to 'unsigned short *'

kako da rijesim ovaj problem zna li neko
Http Status 500
www.Hosting-Directory.co.nr
Free web hosting and domains...
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
*.3dnet.co.yu.

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: problem sa wchar_t konverzijom07.11.2006. u 11:09 - pre 212 meseci
Iako u konkretnom primeru treba da razmisliš još jednom o samom dizajnu programa,
jer si bespotrebno upao u probleme sa cast-ingom, evo kako bi to moglo da se prepravi
tek da proradi:

// netestrirano

Citat:

ProviderName=argv[1];

Code:

ProviderName = (wchar_t*)argv[1];

itd...
Citat:

cout<<"argument 1: "<<ProviderName<< endl;

Code:

// ovo nisam testirao, ali mislim da ćeš morati i ovde da cast-uješ,
// jer ćeš inače dobiti vrednost adrese
cout<<"argument 1: "<<(char*)ProviderName<< endl;

Ovde imaš grešku:
Citat:

Overwrite=argv[6];

...treba 5, što govori da bi trebao da uvedeš i neku vrstu provere, koja treba
da bude i dobra programerska praksa, na primer:
Code:

if ( argc > NEŠTO)
{
   // ... kod ...
}


 
Odgovor na temu

MirzaSila
Sarajevo

Član broj: 28958
Poruke: 162
*.PPPoE-2347.sa.bih.net.ba.

Sajt: www.hosting-directory.co...


Profil

icon Re: problem sa wchar_t konverzijom07.11.2006. u 12:28 - pre 212 meseci
hvala na odgovoru.rijesio sam onako kako si ti rekaO.E sad me zanima kako da argv[5] pretvorim u bool jer mi to treba.
Http Status 500
www.Hosting-Directory.co.nr
Free web hosting and domains...
 
Odgovor na temu

Dragi Tata
Malo ispod Kanade

Član broj: 1958
Poruke: 3906
65.213.80.*



+6 Profil

icon Re: problem sa wchar_t konverzijom07.11.2006. u 12:54 - pre 212 meseci
Ovo je školski primer kako ne treba koristiti castovanje. Čim naletiš na neku operaciju koja zaista očekuje wchar_t* sleduje ti karambas.

Jednostavno promeni deklaraciju sa wchar_t na char i to će lepo da radi.
 
Odgovor na temu

MirzaSila
Sarajevo

Član broj: 28958
Poruke: 162
*.PPPoE-2347.sa.bih.net.ba.

Sajt: www.hosting-directory.co...


Profil

icon Re: problem sa wchar_t konverzijom07.11.2006. u 12:56 - pre 212 meseci
problem je u tome sto imam externu funkciju koja koristi kao ulazne parametre wchar_t.mozda ima neki nacin da pretvorim char u wchar_t.
Http Status 500
www.Hosting-Directory.co.nr
Free web hosting and domains...
 
Odgovor na temu

kiklop74
Darko Miletić
Buenos Aires

Član broj: 78422
Poruke: 569
*.iplannetworks.net.

Sajt: ar.linkedin.com/pub/darko..


+13 Profil

icon Re: problem sa wchar_t konverzijom07.11.2006. u 13:21 - pre 212 meseci
Zasto koristis wchar_t* ?

1. S obzirom da vec upotrebljavas standardnu biblioteku koristi onda std::wstring.
2. Ne mogu se ispisivati unicode stringovi koristeci cout. Za njih se koristi wcout.
3. Ne moze se kastovanjem konvertovati obican string u unicode string, za to treba da se napise funkcija.

dakle nesto kao ovo:

Code:
#include <cstdlib>
#include <string>
#include <iostream>
#include <vector>

std::wstring string2wstring (const std::string& str) {
  std::wstring result;
  if (!str.empty()) {
    std::vector<wchar_t> buffer(str.size());
    std::size_t res = std::mbstowcs(&buffer[0],str.c_str(),str.size());
    if (res > 0) {
     result.assign(buffer.begin(),buffer.end());
    }
  }
  return result;
}


Onda bi tvoj dalji kod izgledao malo drugacije:

Code:
 int main(int argc, char* argv[])
{
 if (argc < 7) {
   std::cerr << "Greška" << std::endl;
 }

 for (int pos=1; pos < argc; ++pos) {
   std::wcout <<  L"Argument " << pos << L": "
              <<string2wstring(argv[pos]) << std::endl;
 }

 return EXIT_SUCCESS;
}


I da bi dobio wchar_t* od std::wstring dovoljno je da koristis c_str() dakle nesto kao ovo:

Code:
void nekafunkcija (wchar_t *param);

std::wstring w(L"aa");
nekafunkcija(w.c_str());


Tko leti vrijedi
 
Odgovor na temu

[es] :: C/C++ programiranje :: problem sa wchar_t konverzijom

[ Pregleda: 2272 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.