Printf используется незнакомым образом - PullRequest
1 голос
/ 05 марта 2010

Я нашел эту строку кода при обновлении проекта C ++ Builder до RAD Studio 2009:

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

Он не компилируется в 2009 году, однако, какова цель этой строки и что является лучшим эквивалентом? Учитывая, что mProcessLength->Text теперь является wchar_t*.

Ответы [ 4 ]

3 голосов
/ 05 марта 2010

Я подозреваю, что вы получаете эти ошибки:

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

Это параметры, которые вы передаете в printf, которые не соответствуют. Меняя его на:

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

изменит ваш строковый литерал на правильный тип.

1 голос
/ 05 марта 2010

Скорее всего, wchar обрабатывается как строковый тип VCL UnicodeString.Он имеет функцию printf, которая принимает стандартные аргументы printf, за исключением указателя на строку.Сам UnicodeString заполняется отформатированной строкой.

UnicodeString printf

Таким образом, UnicodeString создается в стеке автоматически и вызывается метод printf, указатель затемнабил обратно в wchar.

0 голосов
/ 11 июня 2010

Если заметить, что Text является свойством, то вызов printf () для него НЕ приведет к обновлению свойства новым значением. И AnsiString, и UnicodeString имеют конструкторы для форматирования числовых значений, поэтому вместо них можно использовать следующее во всех версиях C ++ Builder одинаково:

mProcessLength->Text = mStreamLength; 
0 голосов
/ 05 марта 2010

Вы, вероятно, хотите, чтобы wsprintf ... выглядело так, как будто изначально это был какой-то класс с функцией-членом с именем printf, который, вероятно, просто передавал свои параметры в wvsprintf.

...