Задать вопрос
  • Как разбить строку на подстроки и определить их в динамический массив строк с помощью си?

    @res2001
    Посмотрите внимательно сюда:
    s[i]=(char *)malloc( 60*sizeof(char));
    и сюда
    s[i]=istr;
    1. Тут есть потеря выделенной malloc памяти во втором присваивании.
    2. Память mallocом вы выделяете под "подстроку", но в s[i] у вас в итоге хранятся указатели на уже существующую строку в c[300]. И это правильно! Цикл с mallocом вообще лишний. Просто определите s как статический массив указателей рамерностью в 2 раза меньше, чем массив c.

    Если вам нужно только вывести строки и не обязательно их складывать в массив, то и s[] вам не нужен - сразу же выводите istr на экран.
  • Как не собирать повторно зависимость при сборке проекта в cmake?

    @res2001
    Другой вариант - использовать библиотеку как внешнюю зависимость.
    В этом случае в вашем проекте уже не будет сабмодуля с библиотекой - библиотека будет полностью внешней сущностью. Пользователь должен будет ее установить самостоятельно каким-то образом, а в вашем проекте просто надо выводить ошибку, если find_package не нашел библиотеку.
    При установки библиотеки обычно вместе со своим бинарником и заголовками устанавливают так же файлы для поиска библиотеки. Это могут быть те же find.cmake файлы для find_package, где будет add_library(... IMPORTED ...). Или конфигурационный файл для pkg-config - эта линуксовая утилита, с помощью которой find_package находит большую часть внешних библиотек.
    В винде вместо pkg-config используются возможности какого-либо пакетного менеджера, например для MSVS есть vcpkg. Обычно в этом случае в cmake уже есть поддержка пакетного менеджера и find_package в состоянии найти библиотеку установленную с его помощью.
  • Как не собирать повторно зависимость при сборке проекта в cmake?

    @res2001
    Mars36, Ок. Тогда можно делать так:
    вручную проверяете наличие собранной библиотеки:
    1. Если библиотека собрана, то создаете цель для библиотеки с помощью add_library(... IMPORTED ...) имя для цели задаете такое же как и в цели для сборки библиотеки. По уму в директиве add_library надо задать не только путь к бинарному файлу библиотеки, но и пути к заголовкам. В этом случае цель импортированной библиотеки будет аналогична цели для собираемой библиотеки и подключать библиотеку к вашей конечной цели можно будет обычным образом через target_link_libraries() без дополнительных действий.
    2. Если библиотека не собрана - add_subdirectory()

    Лучше всего создать свой собственный файл find<имя библиотеки>.cmake для поиска библиотеки, который будет использовать find_package и там производить все эти манипуляции. Примеры подобных файлов поиска в интернете полно.
    Так же нужно учесть, что собранная библиотека будет лежать в каталоге сборки, а не в каталоге сабмодуля. Если не ошибаюсь, каталог сборки можно получить из переменной ${CMAKE_CURRENT_BINARY_DIR}, но это не точно.
    Содержимое переменных можно вывести на экран с помощью message.
    У cmake толковая документация, так что рекомендую: https://cmake.org/cmake/help/v3.7/genindex.html
  • Как не собирать повторно зависимость при сборке проекта в cmake?

    @res2001
    У вас либа в проекте в виде бинарника лежит?
    Тогда можете просто ее указывать в target_link_libraries().
    Если либа в исходниках и ее нужно просто один раз собрать, то оно в принципе так и работает по умолчанию.
    Да в каталог с либой cmake будет заходить при каждой сборке. Ведь конфиг cmake для либы лежит в каталоге с либой и по другому он просто не знает на какие зависимости нужно смотреть. Кроме того пока не проверит каждый файл на предмет изменений, cmake не может узнать не изменилось ли чего в библиотеке. Но пересобирать библиотеку cmake не будет, если нет необходимости.
  • Зачем используют константы для объявления длины массива?

    @res2001
    Hemul GM, Предпочитаю использовать вариант: ДлиннаМассива(массив), чем константу, т.к.:
    1. для статических С/С++ массивов это константное выражение вычисляется на этапе компиляции и не отнимает процессорного времени при выполнении.
    2. Часто семантически более понятно явное взятие длины массива, чем использование константы, т.к. константы и массивы часто называются так, что между ними трудно уловить связь и приходится при чтении кода дополнительно выяснять эти связи. При использовании выражения ДлиннаМассива(массив) такой неоднозначности не возникает.

    При этом массив объявляется, конечно, с использованием константы.

    Для VLA массивов выражение ДлиннаМассива(массив) вычисляется на этапе выполнения. Вообще лучше не использовать VLA, особенно в С++.
  • Как вызвать класс комплексное число?

    @res2001
    im_noob, Я так и подумал.
    Complex complex = polynom.computePolynomial();
    complex.show();
  • Как вызвать класс комплексное число?

    @res2001
    im_noob,
    его результат вывести на экран

    computePolynomial() сам ничего не выводит, он только вычисляет. Это ясно по его коду.
    Вам надо вывести результат на экран любым способом, который придумаете. Впрочем в коде уже все придумано, нужно только использовать.
  • Как получить доступ к винчестеру?

    @res2001
    Давно не слышал употребление слова винчестер :)
    Вы его употребляете тут в значении "жесткий диск"?
    Если да:
    Какие сегменты на жестком диске?
    Там есть файлы, каталоги, сектора, головки, цилиндры, ... Сегментов нет. Что же вам нужно?
  • Как связать динамическую библиотеку с кодом cpp?

    @res2001
    брюликам не важно сколько ты н, При запуске начинают играть уже другие правила!
    В линуксе при запуске программ динамические библиотеки не ищутся в текущем каталоге или в каталоге откуда запускается программа, они ищутся только в определенных местах. Обычно это /lib, /usr/lib, ...
    Каталоги поиска библиотек можно сконфигурировать с помощью команды ldconfig.
    Но проще запускать программу так:
    LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH ./a.out
    Т.е. перед запуском вы прописываете текущий катало (".") в переменную LD_LABRARY_PATH и загрузчи начинает искать библиотеки в текущем каталоге. Но в продакшене нужно библиотеку положить в какой-либо путь "по умолчанию".
  • Как связать динамическую библиотеку с кодом cpp?

    @res2001
    брюликам не важно сколько ты н,
    В /root у вас должен лежать файл libselenium.so

    Читайте внимательно!
  • Как связать динамическую библиотеку с кодом cpp?

    @res2001
    брюликам не важно сколько ты н, Когда вы линкуете статическую библиотеку, то она вся лежит в lib. Когда линкуете динамическую, то в lib лежат ссылки на экспортируемые функции соответствующей .dll. В so эта информация хранится в самом файле и lib не нужен.
    Лежит но г++ его прямо не хочет видеть.

    Может вы не правильно указываете имя библиотеки в команде, нет прав на файл библиотеки, на библиотеке нет права на выполнение... Тут уже какие-то элементарные причины. Ищите где вы ошиблись.
    Давайте сюда полный вывод g++.
  • Как связать динамическую библиотеку с кодом cpp?

    @res2001
    брюликам не важно сколько ты н,
    cannot find -lsel

    У вас библиотека selenium?
    На самом деле в линуксе все проще. В винде для линковки библиотеки нужна не сама библиотека (.dll), а промежуточный файл .lib, при этом сама .dll понадобится только при выполнении программы.
    В линуксе этой прослойки .lib нет, поэтому немного проще. Но в целом все аналогично должно работать.
    В /root у вас должен лежать файл libselenium.so
  • Как связать динамическую библиотеку с кодом cpp?

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

    На счет сборки:
    1. в опции -l не надо указывать префикс lib, т.е. просто -lselenium
    2. Линковщик должен знать где фактически лежит библиотека. Если она лежит не по стандартному пути уже известному линковщику, то нужно при сборке использовать ключ -L<путь к бинарникам библиотеки>.
    3. Компилятор должен знать где искать заголовочные файлы библиотеки, если они расположены не по стандартным путям. Чтоб указать дополнительный путь к заголовочным файлам нужно использовать ключ -I<путь к заголовкам библиотеки>
  • Почему скорость битовых операций отличается в 1000 раз?

    @res2001
    bakdurak,
    не должен выкинуть

    Я читал коменты. Да там все верно написано.
    Вот только в дополнение к написанному в bit у вас сейчас простое присваивание, а следовательно на выходе из цикла имеет значение только последняя итерация. Если я это увидел, то и компилятор то же увидет :)
    И вывод переменной в конце тут не поможет - вам надо каким-то образом использовать значения всех итераций цикла bit += - самый простой вариант это сделать.
  • Где ошибка в коде?

    @res2001
    Вы откомпилируйте программу. Любой компилятор вам скажет где ошибка в коде.
    Если вы не знаете как интерпретировать сообщение компилятора, то давайте его сюда.
    Так сходу скажу, что ошибка есть тут: *x[i]= *x[i] * *x[i];
    Нужно писать так: x[i]= x[i] * x[i];
  • Почему скорость битовых операций отличается в 1000 раз?

    @res2001
    bakdurak, Кстати, есть шанс, что компилятор вообще выкинет цикл for (int j = 0; j < 8; ++j).
    И оставит от него в лучшем случае последнюю итерацию. А если будет совсем молодец, то выкинет и верхний цикл то же.
    По уму вам нужно делать bit += ..., что бы у компилятора не было повода что-то выкинуть из кода.
  • Почему скорость битовых операций отличается в 1000 раз?

    @res2001
    bakdurak, Разверните вручную этот цикл for (int j = 0; j < 8; ++j)
    Т.е. просто запишите 8 операций, маску указывайте константой, а не из массива и не сдвигом.
    Это будет самый быстрый вариант, имхо.
    Вообще компилятор может и сам это сделать, при каком-то уровне оптимизации, но тут не угадаешь.

    PS: Что у вас в задаче этот участок кода настолько критичен? Я бы не стал заморачиваться с его оптимизацией в принципе - так как на одиночных операциях тут прирост производительности в оптимизированной версии мизерный.
  • Соглашаться ли получать меньше на испытательном сроке?

    @res2001
    Согласен с Сергей Горностаев но процент великоват. У меня на последнем месте то же был 3 месяца испытательный срок, платили меньше на ~12%. Если, по вашим меркам, компания того стоит , то есть смысл соглашаться на испытательный срок. На счет снижения оплаты стоит обсудить с работодателем, если вам кажется, что это слишком много.
    Вообще на моей практике практически везде были испытательные сроки с пониженной оплатой, в т.ч. и на вакансиях не связанных с разработкой.
  • RDP из другой подсети подключается через раз. Как решить?

    @res2001
    Dmitriy, Судя по всему клиент просто сообщает, что сервер отвалился. Нужно смотреть журнал на сервере.