Pregunta

He encontrado esta línea de código al actualizar un proyecto de C ++ Builder para RAD Studio 2009:

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

No se compila en 2009, sin embargo, ¿cuál es la intención de esta línea y lo que es mejor equivalente? Teniendo en cuenta que mProcessLength->Text es ahora un wchar_t*.

¿Fue útil?

Solución

Sospecho que vas a encontrar estos errores:

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

Son los parámetros que está pasando a printf que no coinciden. Si lo cambia a:

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

cambiará su literal de cadena al tipo correcto.

Otros consejos

Es muy probable que wchar se maneja como un tipo de cadena UnicodeString VCL. Tiene una función printf que toma argumentos de printf, excepto por el puntero a la cadena. El propio UnicodeString se llena con la cadena con formato.

UnicodeString printf

Así se crea un UnicodeString en la pila de forma automática y el método printf se llama, el puntero se rellena a continuación, de nuevo en wchar.

Es posible que desee wsprintf ... Parece que fue originalmente alguna clase con una función miembro llamada printf, que probablemente acaba de pasar sus parámetros para wvsprintf.

En una nota lateral, en el supuesto de texto es una propiedad, a continuación, llamar a printf () en él no va a upate la propiedad con el nuevo valor. Tanto AnsiString y UnicodeString tienen constructores para dar formato a los valores numéricos, por lo que la siguiente se puede utilizar en su lugar, en todas las versiones de C ++ Builder igualmente:

mProcessLength->Text = mStreamLength; 
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top