Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
Страниц: 1 [2] 3 4 5 ... 10
 11 
 : 09-02-2024 08:41 
Автор Boriska - Последний ответ от Алексей++
Boriska, добавь компилятору три таких флага. Удивишься Отлично
-pedantic-errors -Wall -Wextra

 12 
 : 09-02-2024 08:11 
Автор Boriska - Последний ответ от Boriska
Цитата
так содержимое переменной char s смотри Улыбаюсь А не размер. С размером то всё понятно
содержимое будет обрезанное (хех)
но вякнуть же полагается, ну хоть ворнингом.

 13 
 : 09-02-2024 07:46 
Автор Boriska - Последний ответ от Алексей++
>>да обрезало
так содержимое переменной char s смотри Улыбаюсь А не размер. С размером то всё понятно
содержимое будет обрезанное (хех)


 14 
 : 09-02-2024 07:13 
Автор Boriska - Последний ответ от Boriska
да обрезало. И ни слова предупреждений. Символ то двухбайтовый. Вот интересно, когда int в byte то обязательно поругается, а тут нет.
не доработка однако. И в примере с массивом, тоже не ругнулось, массив char и размер его известен, а мы суем туда char но уже двубайтовый.
https://drive.google.com/file/d/1Or09vx6jxe1T9dtr935sRRyr1UdN8yE0/view?usp=sharing

 15 
 : 08-02-2024 13:59 
Автор Boriska - Последний ответ от Алексей++
Boriska,

char a[] = {'Б'};
- это массив размером в 1 элемент. Литерал 'Б', какой бы он длины не был, обрежется до char

а "ББ" - это строковый литерал. Это массив типа const char [размер]

 16 
 : 08-02-2024 13:11 
Автор Boriska - Последний ответ от Boriska
Я собственно зацепился с эти почему
Цитата
Boriska, литерал "ББ" в файле с кодировкой UTF8 (суть - массив типа const char[5] ) будет содержать
2 байта под 'Б'
2 байта под 'Б'
1 байт под '\0'

итого - 5

язык С, создается массив, вычисляется размер 2 chara (sizeof(char)=1 в С), по идее получается конфликт, вычислено надо две ячейки выделено по две на символ. На каком таком этапе подмена понятий ?
(забудем что это строка), напишем char a[] = {'a'}; должно выделится одна ячейка, один же символ, и sizof говорит одну, а выделит 2.
Какая то не стыковка С и современных кодировок. Это при Ричи символы были по байту, а нынче погдяди в окно, под голубыми небесам великолепными коврами...По идее тогда sizeof в наше время уже не совсем то...Может я че не то горожу ?

 17 
 : 08-02-2024 11:07 
Автор Boriska - Последний ответ от Алексей++
Boriska, литерал "ББ" в файле с кодировкой UTF8 (суть - массив типа const char[5] ) будет содержать
2 байта под 'Б'
2 байта под 'Б'
1 байт под '\0'

итого - 5

если версия языка позволяет, то проверить можно на этапе компиляции:
Код:
static_assert(sizeof s == 5);

Добавлено через 4 минуты и 50 секунд:
можно сделать отдельный файл *.c в нужной кодировке, там определить массив
(название только надо бы более говорящее)

//some.c - этот файл в нужной кодировке, к примеру 1251 Отлично
const char s[3]="ББ";

а в нужных местах (в файлах, где нужно видеть переменную) делать объявление:

Код:
extern const char s[3];



Добавлено через 4 минуты и 18 секунд:
собственно, чего это я. Ведь размер указывать придётся явно - это неудобно

если версия языка позволяет, то можно применить std::string_view

либо в заголовочнике эту переменную разместить, но добавить перед ней inline

 18 
 : 08-02-2024 10:47 
Автор Boriska - Последний ответ от Boriska
Ссылку перебил. Пробуйте.

 19 
 : 08-02-2024 09:25 
Автор Boriska - Последний ответ от RXL
Символ в UTF-8 — это последовательность, от 1 до 4 байт.

 20 
 : 08-02-2024 09:25 
Автор Boriska - Последний ответ от Алексей++
Boriska, там логин какой-то просят

Страниц: 1 [2] 3 4 5 ... 10
Powered by SMF 1.1.21 | SMF © 2015, Simple Machines