Вопрос C++ на ubuntu server не возвращает числа

  • Автор темы Автор темы d0zlove
  • Дата начала Дата начала
std::string::c_str() и у тебя будет указатель на char
ну и полная хуйня идея делать из const char* string что бы сравнивать внутри функции
1751736237323.png
1751736240030.png

 
ну нет, strcmp юзай, либо "апаратная" тоже в string переведи там есть оверрайд оператора сравнения вроде
я уже понял, чет уже туплю
ну нет, strcmp юзай, либо "апаратная" тоже в string переведи там есть оверрайд оператора сравнения вроде
1751736618184.png
1751736629009.png

все равно не робит
1751736769286.png
одно и тоже говнище
 
Последнее редактирование:
попробуй принтануть, что у тебя получает функция, тут либо диспатчер у тя гавно либо ещё чето
в функцию правильно все данные приходят, я 500 раз уже логи смотрел, я уже просто не представляю в чем проблема
что самое смешное, такими проверками через == все приходит к этой функции, а дальше линукс такой типа :2017:
 
ну мб тебе нихуя не возвращается просто хз. типа 0 как дефолт, то есть даже если ретурн будет 11 то все равно ноль вернется
кросплатформ траблес мб питонис траблес
 
ну мб тебе нихуя не возвращается просто хз. типа 0 как дефолт, то есть даже если ретурн будет 11 то все равно ноль вернется
кросплатформ траблес мб питонис траблес
как?
ну мб тебе нихуя не возвращается просто хз. типа 0 как дефолт, то есть даже если ретурн будет 11 то все равно ноль вернется
кросплатформ траблес мб питонис траблес
а ну ахуеть
ну мб тебе нихуя не возвращается просто хз. типа 0 как дефолт, то есть даже если ретурн будет 11 то все равно ноль вернется
кросплатформ траблес мб питонис траблес
и че теперь все 700 строк в одну функцию которая работает совать что-ли?
а если ваще солями уебаться и попробовать все функции обернуть в extern "C" и везде добавить
__attribute__((visibility("default"))), звучит бредово, но эта дрисня работает еще более бредово
 
sizeof(const char*) :roflanEbalo:
strcmp на крайняк memcmp, но никак не == ты что поинтеры собрался сравнивать? :roflanEbalo:
sizeof на строковой литерал возвращает длинну строкового литерала включая нулевой символ, поэтому если у него UTF-8, то из строки "аппаратная" длина которой 10 символов, он получит 10 * 2 + 1 = 21, а не размер указателя
ну нет, strcmp юзай, либо "апаратная" тоже в string переведи там есть оверрайд оператора сравнения вроде
function operator==
provided by <xstring>

→ bool
Parameters:

const basic_string<char, char_traits<char>, allocator<char>> & _Left
const char *const _Right
// In namespace std
template <>
constexpr bool operator== <char, std::char_traits<char>, std::allocator<char>>(
const basic_string<char, char_traits<char>, allocator<char>>& _Left,
const char* const _Right) noexcept


в функцию правильно все данные приходят, я 500 раз уже логи смотрел, я уже просто не представляю в чем проблема
что самое смешное, такими проверками через == все приходит к этой функции, а дальше линукс такой типа :2017:
проблема в кодировках, в питоне .encode() возвращает UTF-8 строку, а в дллке у тебя скорее всего что-то в роде CP1251, и из-за этого в плюсах у литерала "Омск" размер == 4 байта, а от питона идёт строчка из 8 байт
 
поэтому если у него UTF-8, то из строки "аппаратная" длина которой 10 символов, он получит 10 * 2 + 1 = 21, а не размер указателя
как ты умудрился написать в одном придложении, что UTF-8 строка в 10 символов это 21 байт, а в следующей написать, что с питона ему может приходить строчка из 8 байт вместо 4 и это проблема? либо тебе это какой то аишник высрал, либо я хз
 
как ты умудрился написать в одном придложении, что UTF-8 строка в 10 символов это 21 байт, а в следующей написать, что с питона ему может приходить строчка из 8 байт вместо 4 и это проблема? либо тебе это какой то аишник высрал, либо я хз
так я в ответе тебе объяснял то, что твой ответ по поводу sizeof(const char*) неверен, и sizeof со строковым литералом "аппаратная" (10 символов кириллицы) вернёт число 21, а ему я описывал ситуацию с разными кодировками в его коде на примере слова "омск" (4 символа кириллицы), о чем речь?
 
так я в ответе тебе объяснял то, что твой ответ по поводу sizeof(const char*) неверен, и sizeof со строковым литералом "аппаратная" (10 символов кириллицы) вернёт число 21, а ему я описывал ситуацию с разными кодировками в его коде на примере слова "омск" (4 символа кириллицы), о чем речь?
Речь о том, что "Омск" не может быть 4 байта как ты написал, даже если бы кириллица была в 1 байт - символ, даже так было бы 5, а при том, что ты сначала написал правильно, а снизу написал бред
 
Речь о том, что "Омск" не может быть 4 байта как ты написал, даже если бы кириллица была в 1 байт - символ, даже так было бы 5, а при том, что ты сначала написал правильно, а снизу написал бред
по какой причине ты так сильно хочешь подушнить меня за этот нулл-терминатор, что изменится от того что я упомяну этот +1 символ в примере для ТСа? конкретно в моём ответе тебе, я расписывал всё упоминая нулевой символ что-бы было понятно откуда взялось число 21 из sizeof("аппаратная"), в ответе же для ТСа упоминание нулл-терминатора в строке никакой роли не играет, суть остаётся та же - расхождение кодировок. не знаю откуда у тебя ко мне столько негатива с выражениями "снизу написал бред", "либо тебе это какой то аишник высрал, либо я хз", но мне диалоги (а в особенности споры) основанные на нитпикинге не особо интересны
 
по какой причине ты так сильно хочешь подушнить меня за этот нулл-терминатор, что изменится от того что я упомяну этот +1 символ в примере для ТСа? конкретно в моём ответе тебе, я расписывал всё упоминая нулевой символ что-бы было понятно откуда взялось число 21 из sizeof("аппаратная"), в ответе же для ТСа упоминание нулл-терминатора в строке никакой роли не играет, суть остаётся та же - расхождение кодировок. не знаю откуда у тебя ко мне столько негатива с выражениями "снизу написал бред", "либо тебе это какой то аишник высрал, либо я хз", но мне диалоги (а в особенности споры) основанные на нитпикинге не особо интересны
ты чет прицепился к нул терминатору, когда основной мой ответ был про то, что кирилица это мультибайт :roflanEbalo: нуедобное замалчиваешь, типо не видишь:roflanEbalo:
 
вся проблема фиксится передачей длины вместе с указателем и при необходимости байтовым сравнением
так как когда ты передаешь строку как const char* c++ определяет ее длину с помощью strlen то есть до первого нуля
если строка внутри буфера обрезана или не корректно завершается то длина определяется неправильно
в первой функции все работает потому что ты сразу делаешь std::string(city) и strlen на момент вызова еще корректен
во второй функции может использоваться уже скопированный или хуевый буфер где длина оказывается другой

C++:
Expand Collapse Copy
extern "C" {
__attribute__((visibility("default")))
int processData(const char* City, std::size_t length) {
    std::string city(City, length);

    // ...
}

Python:
Expand Collapse Copy
buf = "аппаратная".encode("utf-8")
lib.processData(buf, len(buf))
 
даже если бы кириллица была в 1 байт - символ, даже так было бы 5
это ты сказал, не я)
основной мой ответ был про то, что кирилица это мультибайт
с какого момента "кирилица == мультибайт" стало универсальной истинной для всех кодировок? ты писал мне конкретно про нулл-терминатор, о каком замалчивании ты мне пишешь. если исходя из твоих слов "Омск" это 5 байт в CP1251 и, опять же, по твоим словам ты писал мне НЕ ПРО нулл терминатор, то с какого места взялся пятый байт в слове "Омск" закодированном в CP1251?) а теперь расскажи мне о том сколько же байт занимает символ кирилицы в кодировке CP1251, и после этого ещё раз перечитай своё:
кирилица это мультибайт

предлагаю тебе перестать общаться как быдлосу с бесконечными попытками меня подъебать и спамом рофлан-ебала, и вместо этого начать общаться по сути. в чем состоит твой вопрос?
 
это ты сказал, не я)

с какого момента "кирилица == мультибайт" стало универсальной истинной для всех кодировок? ты писал мне конкретно про нулл-терминатор, о каком замалчивании ты мне пишешь. если исходя из твоих слов "Омск" это 5 байт в CP1251 и, опять же, по твоим словам ты писал мне НЕ ПРО нулл терминатор, то с какого места взялся пятый байт в слове "Омск" закодированном в CP1251?) а теперь расскажи мне о том сколько же байт занимает символ кирилицы в кодировке CP1251, и после этого ещё раз перечитай своё:


предлагаю тебе перестать общаться как быдлосу с бесконечными попытками меня подъебать и спамом рофлан-ебала, и вместо этого начать общаться по сути. в чем состоит твой вопрос?
хули ты разнылся блять успокойся
 
с какого момента "кирилица == мультибайт" стало универсальной истинной для всех кодировок? ты писал мне конкретно про нулл-терминатор
то есть часть предложения "даже если бы кириллица была в 1 байт" ты не читаешь? и делаешь акцент на нул терминаторе :roflanEbalo: Хотя даже так, нулл терминатор имеет огромное значение в си подобных языках, так как строки не иронично NULL-terminated.
с какого момента "кирилица == мультибайт" стало универсальной истинной для всех кодировок?
мы буквально говорим про юникод, UTF-8 тип, ты сам об этом писал, да и у тса принимается char*
предлагаю тебе перестать общаться как быдлосу с бесконечными попытками меня подъебать и спамом рофлан-ебала, и вместо этого начать общаться по сути. в чем состоит твой вопрос?
в том что ты зачем то ответил мне бредом ебаным, отняв у меня минуту времени
можешь не отвечать, я больше не буду тратить свое время
 
мы буквально говорим про юникод, UTF-8 тип, ты сам об этом писал, да и у тса принимается char*
с какого момента мы говорим про один только utf-8 если я пишу тсу про разницу между utf-8 и cp1251) какая разница какой у тса принимается тип поинтера, если по поинтеру может лежать какая угодно последовательность символов\0


то есть часть предложения "даже если бы кириллица была в 1 байт" ты не читаешь? и делаешь акцент на нул терминаторе :roflanEbalo:
я тебе вопрос задал, если установлена однобайтная кодировка (cp1251) и при этом ты говоришь мне не про нулл-терминатор, то из какого места взялся пятый символ в слове "омск". проигнорь лучше этот вопрос ещё раз. ты потерял причинно-следственную связь в своих сообщениях\0


Хотя даже так, нулл терминатор имеет огромное значение в си подобных языках, так как строки не иронично NULL-terminated.
отлично что ты не забыл поддерживать меня в курсе\0


в том что ты зачем то ответил мне бредом ебаным, отняв у меня минуту времени
можешь не отвечать, я больше не буду тратить свое время
значит не трать моё и своё время на тупые попытки доёбов. у меня изначально не было особого желания спорить с кем-либо, как и изначально у меня к тебе не было никакого негатива в моих сообщениях, но ты захотел побыть дефолтным псевдоинтеллектуалом никак неспособным коммуницировать с людьми без постоянных спамов смайликами (для уверенности, наверное) и попыток упомянуть в каждом сообщении о том что я пишу "бред"). не понятно почему тебя так задела моя поправка о sizeof(const char*). удачи
 
Назад
Сверху Снизу