- Релиз набора компиляторов GCC 11, ryoken, 14:11 , 28-Апр-21 (1) [V]
- Релиз набора компиляторов GCC 11, Аноним, 14:26 , 28-Апр-21 (3) –1
- Релиз набора компиляторов GCC 11, Аноним, 15:41 , 28-Апр-21 (14) –12 [V]
- Релиз набора компиляторов GCC 11, Аноним, 15:57 , 28-Апр-21 (19)
- Релиз набора компиляторов GCC 11, Аноним, 16:08 , 28-Апр-21 (20)
- Релиз набора компиляторов GCC 11, Wladmis, 16:12 , 28-Апр-21 (21) +4
- Релиз набора компиляторов GCC 11, Маняним, 16:56 , 28-Апр-21 (27) +2
- Релиз набора компиляторов GCC 11, Аноним, 17:06 , 28-Апр-21 (32) –6 [V]
- Релиз набора компиляторов GCC 11, Аноним, 17:46 , 28-Апр-21 (37) +2
- Релиз набора компиляторов GCC 11, Аноним, 19:06 , 28-Апр-21 (43) –2
- Релиз набора компиляторов GCC 11, Аноним, 21:30 , 28-Апр-21 (53) +1
- Релиз набора компиляторов GCC 11, Аноним, 21:32 , 28-Апр-21 (55) –5 [V]
- Релиз набора компиляторов GCC 11, n00by, 11:00 , 29-Апр-21 (71) +2
- Релиз набора компиляторов GCC 11, zzxc, 15:57 , 29-Апр-21 (75) +2
- Релиз набора компиляторов GCC 11, Cooler, 20:33 , 29-Апр-21 (78) +2
- Релиз набора компиляторов GCC 11, Алкоганон, 05:07 , 02-Май-21 (93)
- Релиз набора компиляторов GCC 11, uis, 11:35 , 02-Май-21 (96)
- Релиз набора компиляторов GCC 11, Аноним, 14:58 , 11-Май-21 (109) –1
- Релиз набора компиляторов GCC 11, Аноним, 20:22 , 28-Апр-21 (46) –4 [V]
- Релиз набора компиляторов GCC 11, ranen, 17:12 , 28-Апр-21 (33)
- Релиз набора компиляторов GCC 11, Аноним, 17:40 , 28-Апр-21 (35) –1
- Релиз набора компиляторов GCC 11, Аноним, 18:30 , 12-Май-21 (110)
- Релиз набора компиляторов GCC 11, Аноним, 14:30 , 28-Апр-21 (5) +2
- Релиз набора компиляторов GCC 11, Анонин, 14:48 , 28-Апр-21 (8) –1
- Релиз набора компиляторов GCC 11, Аноним, 16:57 , 28-Апр-21 (28) +5
- Релиз набора компиляторов GCC 11, Анонин, 17:05 , 28-Апр-21 (31) +2
- Релиз набора компиляторов GCC 11, Аноним, 20:01 , 28-Апр-21 (45) –4 [V]
- Релиз набора компиляторов GCC 11, Аноним, 20:58 , 28-Апр-21 (48) –3
- Релиз набора компиляторов GCC 11, pavlinux, 01:26 , 29-Апр-21 (59)
- Релиз набора компиляторов GCC 11, ixrws, 09:44 , 29-Апр-21 (68) +3
- Релиз набора компиляторов GCC 11, n00by, 11:13 , 29-Апр-21 (72) +2
- Релиз набора компиляторов GCC 11, adolfus, 18:17 , 29-Апр-21 (77) +1
- Релиз набора компиляторов GCC 11, С, 22:25 , 29-Апр-21 (80) –1
char abc[3]; strncpy(abc, "abc", 3); Эти функции изначально предназначались не для строк, а для "записей" (record), поэтому не просто копируют строки, но еще и добивают результат нулями до ширины поля. Или не добивают.
- Релиз набора компиляторов GCC 11, n00by, 06:39 , 30-Апр-21 (82)
- Релиз набора компиляторов GCC 11, С, 09:54 , 30-Апр-21 (84)
> Что не так (если не считать отсутствия в языке "рекордов")?Записи не про язык, они больше про файлы. В сишке представляются сишными структурами. Кроме строковых функций записи еще протекли во всякие calloc и fread, именно поэтому там по два аргумента с размером. Но там это не приводит к проблемам. Как я уже сказал, strncpy не имеет отношения к сишным строкам, поэтому не завершает буфер нулем, а именно дополняет. Если места в буфере после строки не осталось, как в примере выше, то никакого нуля в буфер не запишется. Не раз видел, что слышавшие о проблеме, но неспособные ее понять, пытаются фиксить это так: char abc[3]; strncpy(abc, "abc", sizeof(abc) - 1). Но результат не меняется. А не нравится мне, что даже люди, которые совсем не пару месяцев на си пишут, все равно изредка продолжают об это спотыкаться. К счастью, санитайзеры все это ловят. К несчастью, в релизе санитайзера нет.
- Релиз набора компиляторов GCC 11, n00by, 10:57 , 30-Апр-21 (85)
- Релиз набора компиляторов GCC 11, n00by, 11:58 , 30-Апр-21 (87) +1
- Релиз набора компиляторов GCC 11, С, 14:46 , 30-Апр-21 (89)
> почерпнутое из безусловно полезной книжки ВиртаНе читал, осуждаю. > где про strncpy() сказано На заборе тоже... сказано. > Функция ничего не знает про "буфер", а гарантирует, что в массиве будет размещено n символов. Наконец-то! Именно об этом мы и говорим. На входе валидная строка, на выходе не строка. Тут-то мы и возвращаемся к тому, что нормальных функций работы со строками в стандартной библиотеке нет, и более-менее можно вменяемо использовать лишь snprintf и Annex K, но snprintf надо уметь готовить, а Annex K, решая одни проблемы, создает новые. > надо понять и указать количество ненулевых символов источника + 1 Если мне заранее известна длина строки, я сделаю memcpy(). Мы говорим о случае, когда я не знаю, влезет ли строка в буфер и хочу получить две вещи: 1) обрезанную или нет, но валидную (то есть, нуль-терминированную) сишную строку в буфере; 2) информацию о том, обрезалась ли строка. Функция strncpy() не справляется ни с тем, ни с другим. > Ну и хорошо бы ещё понять (мне) кто и зачем таким образом инициализирует массив. Таким - говнокодеры. В любом серьезном проекте на си первым делом пишется своя, не сломанная реализация strcpy(), и всего остального семейства заодно.
- Релиз набора компиляторов GCC 11, n00by, 16:52 , 30-Апр-21 (90)
- Релиз набора компиляторов GCC 11, pavlinux, 17:16 , 03-Май-21 (99)
- Релиз набора компиляторов GCC 11, n00by, 08:32 , 04-Май-21 (104) –1
- Релиз набора компиляторов GCC 11, pavlinux, 14:17 , 04-Май-21 (105)
- Релиз набора компиляторов GCC 11, n00by, 14:42 , 04-Май-21 (106)
- Релиз набора компиляторов GCC 11, n00by, 06:00 , 06-Май-21 (107)
- Релиз набора компиляторов GCC 11, n00by, 06:55 , 06-Май-21 (108) –1
- Релиз набора компиляторов GCC 11, Аноним, 11:10 , 30-Апр-21 (86)
- Релиз набора компиляторов GCC 11, uis, 11:39 , 02-Май-21 (97)
- Релиз набора компиляторов GCC 11, Аноним, 14:54 , 28-Апр-21 (9) –4 [V]
- Релиз набора компиляторов GCC 11, Аноним, 14:56 , 28-Апр-21 (10)
- Релиз набора компиляторов GCC 11, Аноним, 15:54 , 28-Апр-21 (18) –4 [V]
- Релиз набора компиляторов GCC 11, Jh, 16:14 , 28-Апр-21 (23) –1
- Релиз набора компиляторов GCC 11, Аноним, 16:17 , 28-Апр-21 (24) –4 [V]
- Релиз набора компиляторов GCC 11, menangen, 23:05 , 28-Апр-21 (58)
- Релиз набора компиляторов GCC 11, Аноним, 01:45 , 29-Апр-21 (60) +3
- Релиз набора компиляторов GCC 11, Аноним, 06:49 , 29-Апр-21 (61) +2
- Релиз набора компиляторов GCC 11, fsb4000, 07:45 , 29-Апр-21 (64)
- Релиз набора компиляторов GCC 11, xcode, 08:51 , 29-Апр-21 (65)
- Релиз набора компиляторов GCC 11, Ананоним, 10:46 , 29-Апр-21 (70) –1
- Релиз набора компиляторов GCC 11, Алкоганон, 05:50 , 02-Май-21 (94)
- Релиз набора компиляторов GCC 11, Алкоганон, 06:02 , 02-Май-21 (95)
|