Printf usado de maneira desconhecida
-
24-09-2019 - |
Pergunta
Encontrei esta linha de código ao atualizar um projeto de construtor C ++ para o Rad Studio 2009:
mProcessLength->Text.printf("%d",mStreamLength);
Ele não compila em 2009, no entanto, qual é a intenção dessa linha e o que é um equivalente melhor? Dado que mProcessLength->Text
agora é um wchar_t*
.
Solução
Eu suspeito que você esteja recebendo esses erros:
E2034 Cannot convert 'const char *' to 'const wchar_t *'
E2342 Type mismatch in parameter 'format' (wanted 'const wchar_t *', got 'const char *')
São os parâmetros que você está passando para o PrintF que são incompatíveis. Mudando para:
mProcessLength->Text.printf(L"%d",mStreamLength);
mudará sua string literal para o tipo correto.
Outras dicas
É bom que o WCHER seja tratado como um tipo de sequência VCL unicodestring. Possui uma função Printf que leva argumentos PrintF padrão, exceto para o ponteiro da string. O próprio unicodestring é preenchido com a corda formatada.
Portanto, um unicodestring é criado na pilha automaticamente e o método printf é chamado, o ponteiro é então recheado de volta ao WCHAR.
Você provavelmente quer o WSPRINTF ... parece que foi originalmente uma classe com uma função de membro chamada Printf, que provavelmente acabou de passar seus parâmetros para o WVSPrintf.
Em uma nota lateral, assumindo que o texto seja uma propriedade e, em seguida, chamar Printf () não utilizará a propriedade com o novo valor. Tanto o Ansistring quanto o Unicodestring têm construtores para formatar valores numéricos, portanto o seguinte pode ser usado em todas as versões do construtor de C ++ igualmente:
mProcessLength->Text = mStreamLength;