PDA

Visualizza la versione completa : HELP Visual C++ CString / const char*


Columbia
12-09-2003, 15:34
Ciao a tutti!

Per la mia tesi di laurea sto programmando con il Visual c++ e, anche servendomi della guida, non riesco a risolvere un problema di programmazione:

Io ho una variabile di tipo CString e devo trasformarla in un puntatore a vettore di caratteri.
Ovvero devo passare dal tipo CString al tipo const char*.

Questa operazione mi è indispensabile perchè devo utilizzare la funzione fopen per aprire un file e questa funzione nell'embedded visual c++ (ambiente in cui io lavoro) accetta come parametro in ingresso il path del file da aprire SOLO se di tipo cons char*.

Spero che qualcuno di voi possa aiutarmi perchè attualmente sono bloccata e non posso continuare il mio lavoro. :bhò:

Grazie.

Ciao a tutti :ciauz:

standard
12-09-2003, 15:51
come leggo da qui:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cstring.asp

You can freely substitute CString objects for const char* and LPCTSTR function arguments.

con le string cmq basta concatenare alla tua stringa il "null terminator", ovvero il carattere '\0'.

Columbia
12-09-2003, 16:11
Il link che mi hai mandato è quello della guida microsoft.
Io ho già provato ad applicare la funzione di cui parla e non mi da errori nella compilazione ma una volta eseguito il programma non mi apre il file!

Questo perchè, stampando il path del file che la funzione LPCTSTR ha trasformato da CString a cons char* viene fuori un vettore di caratteri dove ogni carattere della stringa è separato da uno spazio bianco.

Cioè non mi risulta ad esempio un vettore di caratteri:

c:\documenti\config.prs

ma:

c : \ d o c u m e n t \ c o n f i g . p r s

e questo è un cammino non valido per aprire il file.
Io credo che la causa sia nella trasformazione da un tipo di dati a 16 bit ad un altro a 32 bit.

Insomma, devo trovare un altra soluzione per ottenere da una variabile di tipo CString una di tipo const char*, in modo di ottenere un path che possa essere aperto dalla funzione fopen.

Spero di non aver fatto casino ed essere stata abbastanza chiara.
In ogni caso grazie.

standard
12-09-2003, 16:34
Io credo che la causa sia nella trasformazione da un tipo di dati a 16 bit ad un altro a 32 bit.

si credo anch'io.
Penso che il problema sia nel fatto che con CString i caratteri sono in UNICODE, ovvero sono riservati 2 byte per memorizzare il char, mentre nel normale sistema (SBSC, quello del classico C per intenderci) i caratteri sono memorizzati in un solo byte.
Quello che credevo era però che nel carattere UNICODE il secondo byte fosse messo a '\0', che per il normale sistema equivale al "terminatore" di array di caratteri (non uno spazio).

Sono quasi sicuro che esista una qualche macro che ti converte la stringa in UNICODE (o cmq in TCHAR) in un vettore di char.
Cerca nelle macro di conversione, probabilmente troverai qualcosa.

ciauz

Loading