Ошибка обработки файла в строке 2 cannot convert field value to char

Обновлено: 02.07.2024

на строке Str = Edit1->Text.c_str(); возникает ошибка:

[bcc32 Error] Unit3.cpp(22): E2034 Cannot convert 'wchar_t *' to 'char *'

введите сюда описание изображения


27.2k 10 10 золотых знаков 47 47 серебряных знаков 108 108 бронзовых знаков


Ждет строку char* , а ему подсовывают широкую строку wchar_t* . Где именно и что именно и как именно объявлено - смотрите сами. @Harry скорее всего в третьей строке с кодом. Т.к. элемент GUI возвращает UnicodeString. @andy.37: Я веду речь в первую очередь об отсутствии const . Стандартный c_str() (в basic_string ) возвращает указатель именно на const CharT .

Очевидно, что Edit1->Text имеет тип std::wstring (или что-то производное от этого, например CString ) и c_str() соответственно, возвращает const wchar_t* . Правильно будет написать (22-я строка)

7,266 10 10 серебряных знаков 29 29 бронзовых знаков @alexolut не зная, что такое Edit1 об этом можно только гадать. Это может быть MyOwnVeryAttractiveWideString ) Вы наверное никогда не работали в C++ Builder, если так думаете. В принципе, я Вам даже завидую.

Если вам и правда надо wchar_t* конвертировать в char* то у вас два варианта, простой и сложный.

Более сложный WideCharToMultiByte примеры тут указываете кодировку, готовите переменные и конвертируете.

Конвертация нужна если вы используете функции для char* (sscanf), это принципиально два разных типа данных. unicode может содержать много разных символов из нескольких алфавитов, которых в таблице ASCII может не оказаться, сегодня стараються уйти от ASCII к Unicode или utf-8 что бы не иметь проблем с кодировкой. Что бы не конвертировать - можно поискать аналогичные функции для wchar_t* (по идее аналог должен быть sscanfW но не уверен что он есть).

Читайте также: