LINUX.ORG.RU

Нарушение равенства при переводе строк

 , ,


0

1

Любопытный фактец.

Если стандартную C++ стороку создавать из буфера с нулевыми символами на конце, нули будут учитываться в C++ классе, но, очевидно, что с т.з. C’шного представления строка заканчивается на нулевом символе. Т.о., существует такая строка Y, что она и равна созданной строке X, и одновременно неравна ей, в зависимости от того, используется ли C++ интерфейс или доступ к C’шной строке.

Вот пример:

#include <stdio.h>
#include <string>
#include <string.h>

int main()
{
    char str[5] = {'A', 'B', '\0', '\0', '\0'};
    auto s = std::string(str, 5);
    auto s2 = std::string("AB");
    
    // Strings are NOT equal!!!
    printf("std::strings equal? %d\n", s == s2);
    // But wait, they are equal
    printf("C-strings equal? %d\n", strcmp(s.c_str(), s2.c_str()) == 0);
}
std::strings equal? 0
C-strings equal? 1

Это нормально вообще?

★★★★★

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

Программисты должны быть в курсе, как набирать любые юникодные символы

Вот только это не всегда тривиально при постинге с произвольной системы и браузера.

А такие вещи должны быть доступны по дефолту, а не когда «приспичит» соблюдать типографику.

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

Поставь себе какой-нибудь плагин

Опять дилетанты, которые плагины от расширений не отличают, мнят себя великими программистами и знатоками великого программистского диалекта русского языка ;)

копируешь текст из браузера в какую-нибудь программу, например, а он тебе копирует всё вместе со стилями и оформлением

Это фича. Тем, кто красивые статьи оформляют, например, может быть полезен именно уже отформатированный текст (не при рендеринге статьи же его форматировать каждый раз?) Даже допотопный иксовый буфер обмена поддерживает много типов содержимого буфера обмена кряду. Если принимающая программа поддерживает ричтекст, но при этом не может отдельным действием вставить его как плейнтекст, то это её проблемы :P

«не те кавычки» отвлекают меня при копипасте и попытке заставить код работать

Вы вообще не там видите проблему.

Если код вбросили без оборачивания в разметку, то возникают ложные срабатывания разметки (даже с лоркодом такое частенько было на всяких [i], а с мракдауном ещё более вероятно), и код всё равно превращается в кашу. Автозамена кавычек ситуацию особо не меняет.

А вот почему новичков в принципе заставляют пользоваться разметкой, а не запилят для них по дефолту режим без разметки — это уже вопрос идеологии ЛОРа ;) Высокий порог входа, так сказать. Радуйтесь, что матановой капчи нету.

И в рамках этой идеологии вполне имеет смысл усложнять жизнь не только новичкам, но и тем, кто им помогают — чтобы у последних была мотивация пинать новичков оформлять код правильно.

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

они никуда не денутся

Особо упёртые быстро отправляются в бан.

Хотя бы потому, что способность научиться оформлять код сильно коррелирует со способностью понятно излагать вопрос, а не вбрасывать поток мыслей, да и в принципе вести себя адекватно ;)

Прежде всего, новички должны сходу понимать, что форум — это не платная поддержка, и местные ыксперды не обязаны им помогать, а это новички должны извиваться ужом, чтобы для них хоть что-то сделали ;)

mertvoprog ()
Ответ на: комментарий от zendrz

Тире, ёлочки, знаки копирайта и (r) - это все происки ВинВорда

Ну-ну, ещё скажите, что до Вёрда их не существовало. Сходите, что ли, в библиотеку, возьмите там книжку 80-х гг. или ранее (с более новыми уже есть шанс нарваться на свёрстанную макаками), и поищите там эти ваши ASCII-костыли вместо знаков препинания :P

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

Допускается использование других языков при цитировании внешних источников, сообщений об ошибках, исходных текстов программ и в других подобных случаях.

wandrien ()
Ответ на: комментарий от mertvoprog

Это ваше композё в tty работает?

Да, без проблем. Это же вообще не от tty зависит, а от используемого для работы с tty терминала.

А на произвольном мобильнике?

У меня не произвольный мобильник, так что понятия не имею. На моём мобильнике работает.

4.2

Это без аргументированного обоснования работает только для модераторов.

Stanson ★★★★★ ()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от Stanson

а от используемого для работы с tty терминала

Унтерменши без крутых аппаратных терминалов с композёй не нужны? ;)

У меня не произвольный мобильник

N900?

Это без аргументированного обоснования работает только для модераторов.

То есть по дефолту таки всё ненужно?

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

Унтерменши без крутых аппаратных терминалов с композёй не нужны? ;)

Кто-то запрещает назначить Compose на какую-нибудь ненужную клавишу, типа AltGr, Win или WinMenu?

N900?

N9. Там совершенно обычные иксы со всеми вытекающими. С Compose в том числе.

То есть по дефолту таки всё ненужно?

Автозамена кавычек на ёлки на ЛОРе - точно не нужна. Автозамена какой-то типографики это вообще чуждая технология на ресурсах с подобными посетителями. Впрочем, с набеганием вендузятников сюда всё превращается в говно.

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

я просто на предпросмотре смотрел, а тот походу небольшой баг имеет и уже не помню что делал, но короче если переключить разметку туда-сюда ввести и стереть он умудряется оставлять кавычки прямыми, я вот и подумал что это штатное поведение при разметке лоркодом…

AKonia ()
Ответ на: комментарий от mertvoprog

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

AKonia ()
Ответ на: комментарий от Stanson

Кто-то запрещает назначить Compose на какую-нибудь ненужную клавишу, типа AltGr, Win или WinMenu?

Для этого нужно, чтобы:

  1. Composé как таковой поддерживался средой ввода текста.

  2. Были ненужные клавиши ;)

N9

Ну почти угадали ;)

Так и запишем: унтерменши, которые не используют GNU/Linux на всех ЭВМ, не нужны. Даже @maxcom.

Автозамена кавычек

Нет никакой «автозамены», автозамена работает иначе, сразу при вводе. Это стоит рассматривать скорее как особо интерпретируемую часть ЛОРовской разметки. Обратите, опять же, внимание, что писать вообще без разметки на ЛОРе нельзя. Как раз против всяких там виндузятных хомячков ;)

mertvoprog ()