Domanda

Ho trovato questa riga di codice quando si aggiorna un progetto di C ++ Builder per RAD Studio 2009:

mProcessLength->Text.printf("%d",mStreamLength);

Non ha compilato nel 2009, tuttavia ciò che è nelle intenzioni di questa linea e che cosa è una migliore equivalente? Dato che mProcessLength->Text ora è un wchar_t*.

È stato utile?

Soluzione

Ho il sospetto che si stanno ottenendo questi errori:

E2034 Cannot convert 'const char *' to 'const wchar_t *'
E2342 Type mismatch in parameter 'format' (wanted 'const wchar_t *', got 'const char *')

E 'i parametri che state attraversando a printf che non corrispondono. Cambiare a:

mProcessLength->Text.printf(L"%d",mStreamLength);

cambierà la vostra letterale stringa al tipo corretto.

Altri suggerimenti

Ci sono buone probabilità che wchar viene gestita come un tipo di stringa UnicodeString VCL. Ha una funzione printf che accetta argomenti printf standard, tranne per il puntatore a stringa. L'UnicodeString stesso è riempito con la stringa formattata.

UnicodeString printf

Quindi un UnicodeString viene creata in pila automaticamente e il metodo printf viene chiamato, il puntatore viene poi farcito di nuovo in wchar.

Probabilmente si desidera wsprintf ... Sembra che in origine era un po 'di classe con una funzione membro denominata printf, che, probabilmente, appena passato i suoi parametri per wvsprintf.

Una nota a parte, assumendo Il testo è una proprietà, quindi chiamare printf () su di esso non upate la proprietà con il nuovo valore. Sia AnsiString e UnicodeString hanno costruttori per la formattazione dei valori numerici, in modo che il seguente può essere utilizzato invece, in tutte le versioni di C ++ Builder ugualmente:

mProcessLength->Text = mStreamLength; 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top