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

Ну другие ресурсы и блоки кода могут не размечать и не подсвечивать и что ? Более того как по мне если вам не нравятся ёлочки пишите не в маркдауне, а в лоркоде - там кавычки такие как вам хочется - что за программисты несобразительные пошли, что не могут просто переключится на другую разметку, а как только сталкиваются с малейшей трудностью зовут «папу-админа» ?

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

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

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

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

Голосуй, а не то проиграешь!

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

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

а вот что делать тем кто с людьми общается не кодом, а словами и предложениями ?

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

вас не смущает тогда уж и то, что текст вы пишете моноширинным текстом, а тут бац и лор в серифе отображает

Очень смущает, когда ты копируешь текст из браузера в какую-нибудь программу, например, а он тебе копирует всё вместе со стилями и оформлением. Давайте разделять контент и оформление, пожалуйста. Когда на лоре меняют одни кавычки на другие, то это уже порча контента. И если от стилей я могу избавиться, выбрав «paste as text», то для избавления от особенностей васянской автозамены к каждому конкретному случаю нужен особый, кропотливый подход. Не думаю, что тебя это настолько же отвлекает, когда ты читаешь «не те кавычки», как «не те кавычки» отвлекают меня при копипасте и попытке заставить код работать.

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

Нет, как раз вы не можете чисто физически писать «плейнтекстом» на лоре - пишите либо мдауном или лоркодом, более того хотите кавычки писать «плейнтекстом» - лоркод даёт вам эту возможность.

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

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

так лол - напишите себе плагин, который будет ёлочки заменять на прямые кавычки - что людям голову морочить, а так как по мне текущее оформление более гибкое хочешь будут ёлочки ""(короче лоркод не преобразуется в ёлочки…), а хочешь будут прямые кавычки ''''

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

Ну так да - вы копируете размеченное сообщение - ох вы наверное не в курсе что в мд есть таблицы и многое другое, что ещё хуже копируется. А если копируете вы код, то для этого есть разметка блоками кода, в которой и моноширинный шрифт и посимвольное соответствие.

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

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

так лол - напишите себе плагин

Да нет уж, это лучше вы себе плагин напишите. Либо научитесь уже пользоваться компьютером и набирать на нём те символы, которые вам нужны.

моноширинный шрифт

Зациклило тебя на этом моноширинном шрифте. Он вовсе не обязателен для кода. Скомпилируется с любым.

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

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

Зациклило тебя на этом моноширинном шрифте. Он вовсе не обязателен для кода. Скомпилируется с любым.

По логике зачинателя срача нужно ВУСИВУГ, а всякие эти лоровские полужирные и косые стили уже этому не соответствуют, а в остальном в ваших словах нет логики, т.к. повторюсь вам чтобы получить прямые кавычки можно и в блоке кода ввести и с помощью одинарных кавычек и лоркодом, а вот ёлочки - так просто не ввести, протом что они дают стилистическое отличие кода от текста, не притесняя собой прямых кавычек и более того способоствуя чёткому выделению блоков цитирования.

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

Чем ? Если хочется код скопировать, то тот будучи в соответствующем блоке скопируется как нужно, в остальном не ясно что вас возмущает - то что речь это не код ? Или то что прямые кавычки банально хуже выглядят ? Или у вас упоротая кодировка не отображающаяя ёлочек ?)))

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

Чем ? Если хочется код скопировать, то тот будучи в соответствующем блоке

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

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

Два апострофа - это не двойные кавычки.

Если я хочу применить разметку - я её сам применю. Автозамена не нужна вовсе. Не говоря о том, что со смартфона ёлочки и так вводятся быстро, только мне не сдалось их использовать, а вот что для ввода более часто используемого символа приходится экранировать этот символ - факт.

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

Это вот такие простыни надо выдумывать для оправдания этого ненужно? Прям как какой-нибудь чиновник объясняющий откуда у него бабло на виллу в Тоскане. Ты хоть понимаешь, что это только доказывает маразматичность этой автозамены?

Stanson ★★★★★ ()

Либо кушать плюсовые типастроки, либо использовать нормальные нуль терминальные. А так это вообще разные сущности. Пиши на сишке или для плюсов конвертируй мишные в плюсовые и наоборот. Только так ты сохраняешь консистенцию, жертвуя ресурсами. Всё остальное костыли, просто автоматические.

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

API std::string позволяет создать такую строку, и ее равенство с другой строкой одновременно ложно и истинно

В контексте std::string - оно ложно, всё правильно. То, что творится за этим контекстом никого не волнует. То, что для тебя c-str и str::string - одно и тоже, это твои личные сложности.

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

Это ты ещё до переполнения unsigned int не добрался.

таких случаев предусмотрен специальный конструктор с тремя аргументами

Каких случаев? С чего ты взял, что он предусмотрен для ТАКИХ случаев?

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

Ха. Ха. Ха.

Поддерживаю, уже годы про это все жалуются. Сделали блин фичу с ёлочками этими ненужными. Тире, ёлочки, знаки копирайта и (r) - это все происки ВинВорда, в котором эта автозамена была введена чисто для хайпа новой фичи, но хотя бы к месту - это всё таки текстовый процессор. Да и отключать её можно было

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

Угу, т.е. то, что каждый местный пользователь должен будет себе настраивать клавишу сочетания для вас норм - да вы человек-анекдот…. А касательно прямых кавычек уже сто раз писали - вводите лоркодом и будет так как вам нравится - полный ВУСИВИГ.

AKonia ()
Последнее исправление: AKonia (всего исправлений: 2)
Ответ на: комментарий от anonymous

Да нет, как раз плюсовые строки это лишь хранилище-обёртка над сишной строкой вся разница получилась только потому что кое-кто сам указал размер буфера, таким образом плюсовая строка в данном примере уже не строка, а буфер двоичных данных, эдакий «вектор» из char’ов

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

большинству эти ёлки не нужны

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

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

а кто вас знает, по содержанию кавычки - это те же скобки, которые вкладывать не принято, поэтому если цитаты или сравнения выделяются для удобства чтения - то так только лучше, а ВУСИВУГ есть в разметке лоркодом.

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

Можно было предвидеть срачи и не создавать для них повода. У тебя был выбор терпеть нетипографические кавычки, терпеть срачи, или расслабиться и не придавать этому оттенок какой-то проблемы. Ты сделал свой выбор, как и все.

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

при написании текста от руки никто ёлки не ставит

Ложное утверждение => док-во неверно. Кавычки от руки как правило пишут нижней левой и верхней правой парой запятых или штрихов, альтернативно верхними зеркальными, но вот просто прямыми пишут реже.

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

Или тут толпы работников типографий тусуются, а программисты так, случайно зашли?

А почему Вы их разделяете? Вот программисты на TeX, по-Вашему, это кто?

Вы, может, ещё и юникодных символов в коде избегаете в 2$21-м? Ведь у ограничения использованием ASCII чиплячи растут оттуда же, откуда у навешивания нескольких символов на один: одна непарная кавычка вместо различных вариантов кавычек и ёлочек, один символ вместо апострофа и одинарной кавычки (а на печатных машинках ещё и вместо ударения), один символ вместо дефиса, минуса, короткого и длинного тире. При этом апологеты такого подхода почему-то не используют так же выглядящие символы латиницы вместо символов кириллицы, хотя в некоторых кодировках времён СССР и у них был один код ;)

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

И я хочу чтобы его ни одна скотина не изменяла

Ещё пожалуйтесь, что здесь нельзя в чистом виде явно и раздельно отобразить \r\n, \r и \n, ага. И прочие управляющие символы.

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

То есть замена -- на тире и схлопывание одиночных переносов Вас не смущает? ;) Как автозамена кавычек из этого выбивается?

Я не безрукий

Но других безпочатококинецевых полно, и что хуже — идейно безпочатококинецевых, как показывает этот тред.

Надо ещё запилить патч, который предложения принудительно начинает с заглавной буквы (ну или хотя бы посты, чтобы не было ложных срабатываний на всяких сокращениях), а то идейных любителей игнорировать заглавные буквы здесь тоже хватает, хотя это уже даже не типографика, а правила языка.

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

Надо ещё запилить патч, который предложения принудительно начинает с заглавной буквы (ну или хотя бы посты, чтобы не было ложных срабатываний на всяких сокращениях), а то идейных любителей игнорировать заглавные буквы здесь тоже хватает, хотя это уже даже не типографика, а правила языка.

Если это будет вместо замены кавычек, то я за

Harald ★★★★★ ()