Змінюй хід війни! Допомагай ЗСУ!

"научите меня быть девелопером".

  • Автор теми Автор теми Le docteur
  • Дата створення Дата створення
Каждый раз, когда вижу опусы МалэкулЙаду-а возникают два вопроса:
- нахера он страдает с плюсами?
- когда научится гуглить?

- потому, что так надо
- я умею гуглить, а посылать в гугл может только недалёкий человек, который сам там не был.

Для примера - опиши мне исходя из MSDN почему режим "а" дописывает файл нормально, а "r+" - пишет иероглифы вместо даже латинского текста.
Исходные данные: файл открыт с указанием кодировки UNICODE, или UTF-16LE(к стати, в чём отличия?), создан в ней же. проверяются режимы а и r+ при дописывании в конец файла.
Кодировка локали cp1251 используются строки wstring, что ****огично wchar_t (встринг - вектор из char_t)

Дафай. Дерзай.

P.S. Вообще - это форум. Если тебя удивляет, что люди сюда пишут - вопрос, а сам-то ты что тут делаешь?
 
Если я ничего не путаю, то UTF-16 - это кодировка где, как и в случае с UTF-8 может быть переменное число байт на символ.
UNICODE, он же UCS-2 - там всегда 2.
 
Если я ничего не путаю, то UTF-16 - это кодировка где, как и в случае с UTF-8 может быть переменное число байт на символ.
UNICODE, он же UCS-2 - там всегда 2.

⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.


ccs flag No BOM (or new file) BOM: UTF-8 BOM: UTF-16
UNICODE UTF-16LE UTF-8 UTF-16LE
UTF-8 UTF-8 UTF-8 UTF-16LE
UTF-16LE UTF-16LE UTF-8 UTF-16LE

внутренний формат Windows - всегда UTF-16LE. Этот момент следует учитывать при работе с исполняемыми файлами, использующими юникодовые версии функций WinAPI. Строки в них всегда кодируются в UTF-16LE

Нету в винде ни чего кроме 16LE встроеного. Остальное - прибамбасы.
Пишешь UNICODE - подразумеваешь -16LE, судя по таблице выше :)
Если софт под винду и с винапи - там всё будет одинаково.
 
LE BE - это порядок следования байтов. LE - \ = 0х005С, но в памяти будет лежать 5С00
BE - в памяти будет лежать наоборот.
UTF-16 - всегда 16 бит.
 
ААА!! сраный xml :D
Ну почему у него корневых тегов не может быть больше одного? ПОЧЕМУ???
Для чего эту хрень вообще придумали? И зачем люди начали его использовать?
Оно же задроченое!!! Тэг с именем из одних чисел создать нельзя. Ок (уёбки). Больше одного рута - нельзя. Ну как ещё их назвать?

спасібо.
 
ААА!! сраный xml :D
Ну почему у него корневых тегов не может быть больше одного? ПОЧЕМУ???
Для чего эту хрень вообще придумали? И зачем люди начали его использовать?
Оно же задроченое!!! Тэг с именем из одних чисел создать нельзя. Ок (уёбки). Больше одного рута - нельзя. Ну как ещё их назвать?

спасібо.

ты слишком нервный, тебе никто денег не даст.
 
ты слишком нервный, тебе никто денег не даст.

Лучше скажи как выполнить fgetws в wstring.
Он хочет покласть прочитанное в wchar_t* буфер.
Я уже спать хочу - как ему буфер переменной wstring правильно подсунуть? Без StringToCharArrayев всяких. Тупо в си. Как высунуть их wstring массив - предельно понятно. Но как ему засунуть в него - ни как не хотит.

Передача str[0] - не катит. Даже с явнім приведением типа. Ну не хочет fgets туда ничё ложить. Єксцепшен.0xC0000005: Access violation writing location 0x00000031

P.S. Янинервній. Это же ХФ. Ну куда мне ещё на изобретателей xml на орать? Не письмо же гневное им писать, чтобі уроді добавили многорутовость...
 
Лучше скажи как выполнить fgetws в wstring.
Он хочет покласть прочитанное в wchar_t* буфер.
Я уже спать хочу - как ему буфер переменной wstring правильно подсунуть? Без StringToCharArrayев всяких. Тупо в си. Как высунуть их wstring массив - предельно понятно. Но как ему засунуть в него - ни как не хотит.

Передача str[0] - не катит. Даже с явнім приведением типа. Ну не хочет fgets туда ничё ложить. Єксцепшен.0xC0000005: Access violation writing location 0x00000031

str.reserve(дохуя чтобы влезло)
str.data() - это подсовывай
 
PHP:
std::wstring str1 = L"ABCDEFG";

	FILE* file = _wfsopen(L"d:\\test.txt", L"w,ccs=UTF-16LE", _SH_DENYRW);

	fputws(str1.c_str(), file);

	fclose(file);

	std::wstring str2 = L"*****ц подкрался незаметно";
	file = _wfsopen(L"d:\\test.txt", L"r+,ccs=UTF-16LE", _SH_DENYRW);

	fseek(file, 0, SEEK_END);

	fputws(str2.c_str(), file);

	fclose(file);

Прекрасно работает и дописывает без искажений.
так что ты явно ***ню какую-то сделал.
 
str.reserve(дохуя чтобы влезло)
str.data() - это подсовывай

<Error reading characters of string.>

потом, есно, єксцепшен, когда я пытаюсь insert его в вектор.
Exception thrown: read access violation.
_Parent_proxy was 0x220020.

P.S. Ежели б оно работало, я б сюда и не писал.
 
PHP:
std::wstring str1 = L"ABCDEFG";

	FILE* file = _wfsopen(L"d:\\test.txt", L"w,ccs=UTF-16LE", _SH_DENYRW);

	fputws(str1.c_str(), file);

	fclose(file);

	std::wstring str2 = L"*****ц подкрался незаметно";
	file = _wfsopen(L"d:\\test.txt", L"r+,ccs=UTF-16LE", _SH_DENYRW);

	fseek(file, 0, SEEK_END);

	fputws(str2.c_str(), file);

	fclose(file);

Прекрасно работает и дописывает без искажений.
так что ты явно ***ню какую-то сделал.
И шо, работает на чтение файл в режиме "w"?
Єє... я не догадівался в c_str() пхать, вроде. Щас проверю. Там только с С17 можно. В С11 написано - не использовать для последовательностей символов, так как он не гарантирует, что они все подряд лежат. ХЗ... у меня 17й, вроде, в студии включен. И то про [] векторов. проверим.
 
Нет. Чтение не происходит. От слова совсем.
Операция совершается, но содержимого - нет в переменной.
Я сейчас про ЧТЕНИЕ.
Дописал я ещё вчера. И без того макроса, который ты применил там после кодировки, или что это за хрень
 
fgetws - чтение строки. В wchar_t* [] - читает без вопросов.
А я хочу в wstring прочитать.
И, вот, с ним проблема - он фактически не читает даже если команда проходит. Потом, естественно, ексцепшен при попітке его всунуть в вектор.
Уже думаю - может не выёбываться, читать в массив чаров как он просит, и уже его потом в стринг переделывать?
 
P.S. А, єто флаг блокировки ті применил.
 
Нет. Чтение не происходит. От слова совсем.
Операция совершается, но содержимого - нет в переменной.
Я сейчас про ЧТЕНИЕ.
Дописал я ещё вчера. И без того макроса, который ты применил там после кодировки, или что это за хрень

Билять.... вот как ты так можешь? :іржач:
Все работает.

PHP:
int main()
{
	std::wstring str1 = L"ABCDEFG";

	FILE* file = _wfsopen(L"d:\\test.txt", L"w,ccs=UTF-16LE", _SH_DENYRW);

	fputws(str1.c_str(), file);

	fclose(file);

	std::wstring str2 = L"*****ц подкрался незаметно";
	file = _wfsopen(L"d:\\test.txt", L"r+,ccs=UTF-16LE", _SH_DENYRW);

	fseek(file, 0, SEEK_END);

	fputws(str2.c_str(), file);

	fclose(file);

	std::wstring str3;
	str3.reserve(100);

	file = _wfsopen(L"d:\\test.txt", L"r,ccs=UTF-16LE", _SH_DENYRW);
	fgetws(const_cast<wchar_t*>(str3.data()), 100, file);

	fclose(file);

	std::wstring str = str1 + str2;

	_ASSERT(!wcscmp(str3.c_str(), str.c_str()));

	return 0;
}
 
Билять.... вот как ты так можешь? :іржач:
Все работает.

PHP:
int main()
{
	std::wstring str1 = L"ABCDEFG";

	FILE* file = _wfsopen(L"d:\\test.txt", L"w,ccs=UTF-16LE", _SH_DENYRW);

	fputws(str1.c_str(), file);

	fclose(file);

	std::wstring str2 = L"*****ц подкрался незаметно";
	file = _wfsopen(L"d:\\test.txt", L"r+,ccs=UTF-16LE", _SH_DENYRW);

	fseek(file, 0, SEEK_END);

	fputws(str2.c_str(), file);

	fclose(file);

	std::wstring str3;
	str3.reserve(100);

	file = _wfsopen(L"d:\\test.txt", L"r,ccs=UTF-16LE", _SH_DENYRW);
	fgetws(const_cast<wchar_t*>(str3.data()), 100, file);

	fclose(file);

	std::wstring str = str1 + str2;

	_ASSERT(!wcscmp(str3.c_str(), str.c_str()));

	return 0;
}
ХЗ может потому, что я 20 лет назад консольное приложение последний раз видел, а может потому, что после работы ещё и этим потом занимаюсь.
Приду домой по смотрю.
 
Назад
Зверху Знизу