LINUX.ORG.RU

Проблеммы строковой функции puts на С.


0

0

Программа на С. При инициализации массива строкой на русском языке и выводе её через функцию puts, компилятор требует в два раза большего размера массива - в сравнении с длинной строки , а вывод через указатель в puts происходит с нарушениями. В то же время все работает нормально, если строка - на английском. В чем дело? Что-то с кодовой таблицей?


Ответ на: комментарий от Legioner

> В C нет строк. Там есть массивы из байтов.

а люди 40 лет пользовались - наивные не знали, что функции str%%% надо переименовать и запихнуть в Java-class или еще куда-то, чтоб тот же массив байтов стал строкой

lester ★★★★
()
Ответ на: комментарий от Legioner

Имею в виду : char mas[40] = "....анл. или русск.?";
puts() - с русским алфавитом - работает с нарушениями,как сказал выше, а printf(),например,работает как надо.Почему такая разница?

can
() автор топика
Ответ на: комментарий от can

Если вы используете однобайтовую локаль при разработке (KOI8-R, CP1251), строка "....англ. или русск." будет проинтерпретирована как вы ожидаете, на каждый символ по одному байту. Если вы используете UTF-8, то на кириллические символы будут отводиться по два байта. Все функции работают как надо, просто стандартная библиотека требует размер строки в байтах а не в символах.

Legioner ★★★★★
()

Поняли смысл использования однобайтных кодировок?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Legioner

>Если вы используете однобайтовую локаль при разработке

не локаль, а кодировку в редакторе. компилятор не интерпретирует, он жрёт что ему дают.

anonymous
()
Ответ на: комментарий от lester

просвещайтесь

и как это противоречит моим словам?

jtootf ★★★★★
()

Проблеммы


проблемы с рюсский языка

Karapuz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.