powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / почему printf не печатает строку в консоли ?
25 сообщений из 87, страница 3 из 4
почему printf не печатает строку в консоли ?
    #39975318
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
В плюсах тоже надо переводить во что-нибудь с фиксированным числом байт и так уже работать.
Только так оно работать не будет. Почти никогда не будет работать.

P.S.
Выкидывать надо UTF-16/-32, как рассадник опасных иллюзий.
Это уже даже до мелкомягких дошло.
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975330
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я заметил что любой топик с кодировками всегда скатывается к обсуждению внутреннего представления строк
таких как char *, wchar_t *, char16_t *, char32_t std::string, CString, TString, AnsiString, QString e.t.c.

Как будто-бы есть какая-то недосказанность. Или несовершенство.
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975333
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Как будто-бы есть какая-то недосказанность. Или несовершенство.

Есть одна совершенная кодировка, ну ты понял, какая.

Basil A. Sidorov
Только так оно работать не будет. Почти никогда не будет работать.

Почему это?
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975400
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Почему это?
В реалиях юникода, порочна сама идея представить символ (алфавита) фиксированным числом байт. По факту тип "char" в значении "символ (какого-то) алфавита" надо просто выкидывать из библиотек и языков программирования.
А в ситуации, когда у вас есть (только) "массив байт, представляющий строку символов", фундаментальным преимуществом UTF-8 становится обратная совместимость с US-ASCII.
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975424
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovфундаментальным преимуществом UTF-8 становится обратная совместимость с US-ASCII.

Ага, то есть тем самым char фиксированного размера, который "надо выкидывать". Ню-ню...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975427
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1)
я сделала проверку на аварийный выход
$?
в обоих случаях программа нормально завершается

2)
дальше пока еще не разобралась
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975430
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
ну хорошо, 2
просто я запуталась
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975431
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab$?

Это, вообще-то, проверка не на "аварийный выход", а на код возврата...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975433
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
mayton,
ну хорошо, 2
просто я запуталась

Посмотри мой сорц. Там есть строгое правило выхода.
И есть более улучшенная фильтрация на слова и не-слова.
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975438
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,
но если код возврата 0, то аварийного выхода не было? так или нет?
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975447
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabтак или нет?

В принципе да. Хотя есть варианты.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975453
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Basil A. Sidorovфундаментальным преимуществом UTF-8 становится обратная совместимость с US-ASCII.

Ага, то есть тем самым char фиксированного размера, который "надо выкидывать". Ню-ню...

char можно сделать 32х битным. Но это не означает что размер string типа будет умножаться на количество символов.

Грубо говоря string - это стрим из "плавающих" символов. Хотя на итераторе вы можете получать 32х битный символ
если вам так хочется рассмотреть его отдельно от строки.
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975471
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975479
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По поводу 16 бит и Microsoft. Мне кажется что спор между правильным и неправильным способом представления строк
может перейти в плоскость того важнее ли корпоративный стандарт или общий .

Кажется что еще на заре Windows-NT 4.0 они уже определили API который работает с 16 разрядным
символом. Использует ли MS понятие суррогатных пар - ХЗ. Я не знаю.

Кто в теме - просветите plz. Я имею в виду кодеров именно под платформу Windows.
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975488
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Они определили API, которое работало с UCS-2. А потом просто чтобы не париться объявили
его UTF-16, пользуясь их совместимостью. На суррогаты, как и все остальные, забили,
ограничившись созданием функций нормализации.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975494
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Использует ли MS понятие суррогатных пар - ХЗ. Я не знаю.

UCS-2 был в NT с самого начала (3.1)

UTF-16 использует начиная c windows 2000 .


многие не заморачиваются и не различают UCS-2 и UTF-16
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975554
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Ага, то есть тем самым char фиксированного размера, который "надо выкидывать". Ню-ню...
"char фиксированного размера" это US-ASCII.
Поскольку в юникоде не используются коды в диапазоне 128-255, то в юникоде нет других кодировок с символом фиксированной ширины. А вот составные символы есть даже в кирилице.
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975557
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Кажется что еще на заре Windows-NT 4.0
Во-первых - 3.x
Во-вторых, я не зря использовал формулировку "даже до мелкомягких дошло ...": в более-менее свежей десятке уже предлагается включение поддержки UTF8 в системе. В 1809 - как бета. Но тренд - характерный.
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975560
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я еще одну программу написала

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <wctype.h>
#include <errno.h>
#include <locale.h>

int main(int argc, char **argv) {

       // вот эта строка будет выведена на экран
	wprintf(L"\n*** 1 - END OF FILE ***\n");

	// а вот эта строка не будет выведена на экран
	printf("\n*** 2 - END OF FILE ***\n");

	return 0;
}



вопрос: почему это так странно работает?
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975572
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab, у тебя Windows?
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975575
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblab
вопрос: почему это так странно работает?
printf предполагает на входе ASCIIZ-строку вне зависимости от того, какие настройки проекта для строковых констант. первый байт в литерале "\n*** 2 - END OF FILE ***\n" оказывается равным 0, и printf уверенно завершает свою работу, он ведь дочитал до конца строки)
так вижу
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975579
vAH_O6Vg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mini.weblab
вопрос: почему это так странно работает?

Потому что по стандарту это неопределенное поведение.
Each stream has an orientation. After a stream is associated with an external file, but
before any operations are performed on it, the stream is without orientation. Once a wide
character input/output function has been applied to a stream without orientation, the
stream becomes a wide-oriented stream. Similarly, once a byte input/output function has
been applied to a stream without orientation, the stream becomes a byte-oriented stream.
Only a call to the freopen function or the fwide function can otherwise alter the
orientation of a stream. (A successful call to freopen removes any orientation.)
...
The three predefined streams stdin, stdout, and stderr are unoriented at program startup.
...
Byte input/output functions shall not be applied to a wide-oriented stream and wide
character input/output functions shall not be applied to a byte-oriented stream.
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975580
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0

egorych,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <wctype.h>
#include <errno.h>
#include <locale.h>

int main(int argc, char **argv) {

    // строка будет выведена на экран
	printf("\n*** 1- BEGINNING OF FILE ***\n");

	// строка НЕ БУДЕТ ВЫВЕДЕНА на экран
	wprintf(L"\n*** 1 - END OF FILE ***\n");

	// строка будет выведена на экран
	printf("\n*** 2 - END OF FILE ***\n");

	return 0;
}
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975586
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vAH_O6Vg,
я примерно что такое и думала
как называется часть стандарта, где это написано?
...
Рейтинг: 0 / 0
почему printf не печатает строку в консоли ?
    #39975592
vAH_O6Vg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mini.weblab, Ссылка на последний черновик стандарта(корявит пост, если попытаться спрятать её под url=) https://web.archive.org/web/20181230041359if_/http://www.open-std.org/jtc1/sc22/wg14/www/abq/c17_updated_proposed_fdis.pdf

Поиском по тексту находится, но вообще раздел "7.21.2 Streams"
...
Рейтинг: 0 / 0
25 сообщений из 87, страница 3 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / почему printf не печатает строку в консоли ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]