LINUX.ORG.RU

Сообщения sniper21

 

в С строке не находится вторая «<» в цикле

Форум — Development

Вот код, который смотрит на строку из массива lines_down и сравнивает её с lines_temp. Если находит звездочку, то выписывает значение и продолжает дальше пока не кончатся звездочки. Потом переходит к другой строке.

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


char *substring(const char *str, size_t begin, size_t len) {
    if (str == 0 || strlen(str) == 0 || strlen(str) < begin ||
        strlen(str) < (begin + len))
        return 0;

    return strndup(str + begin, len);
}

int main() {
    char *make_string = NULL;
    char *final_string = NULL;
    char **lines_down = (char *[]){"<tr> <th>Test_Value_1</th> <th>4334</th> </tr>",
                              "<tr> <th>Test_Value_2</th> <th>5467</th> </tr>",
                              "<tr> <th>Test_Value_3</th> <th>34543</th> </tr>",
                              NULL
                             };
    char **lines_temp = (char *[]){"!#<tr> <th>*</th> <th>*</th> </tr>",
                              "!#<tr> <th>*</th> <th>*</th> </tr>",
                              "!#<tr> <th>*</th> <th>*</th> </tr>",
                              NULL
                             };

    char *substr_temp = NULL;
    size_t comma_length = 1;
    size_t final_string_length = 0;
    while (*lines_temp && *lines_down) {
        if (strstr(*lines_temp, "!#") != NULL) {
            substr_temp = substring(*lines_temp, 2, strlen(*lines_temp) - 2);
            size_t i = 0;
            size_t i2 = 0;
            size_t str1_length = strlen(*lines_down);
            size_t str2_length = strlen(substr_temp);
            char *ptr2 = strchr(substr_temp, '*'); //указатель на * в str2
            char *ptr1 = NULL; //указатель на < в str1

            size_t position = ptr2 - substr_temp;
            size_t count = 0;
            while (ptr2 != NULL) { // пока находится указатель на звёздочку в str2
                //позиция *
                i = ptr2 - substr_temp;
                //ищем < в str1
                if (position < str1_length) {
                    ptr1 = strchr(*lines_down + position, '<');
                } else ptr1 = NULL;
                if (ptr1 != NULL)//если найден <
                {
                    // ==========================================
                    // на четвертой итерации здесь копируется мусор, а потом Test_Value_3 вместо 5467
                    size_t substr_length = ptr1 - (*lines_down + position); // строка под звездочкой
                    make_string = realloc(make_string, substr_length + 1); // выделить память для подстроки плюс нулевой символ
                    strncpy(make_string, *lines_down + position, substr_length); // скопировать в make_string строку под звездочкой из исходной строки (lines_down + позиция *)
                    make_string[substr_length] = '\0'; // добавить строку под звездочкой в make_string

                    //скопировать в финальную строку и добавить запятую в конец
                    final_string = realloc(final_string, final_string_length + substr_length + comma_length + 1); // память - длина final_string + длина строки под звездочкой + запятая + нулевой символ
                    final_string[final_string_length] = '\0'; // добавить нулевой символ
                    final_string = strcat(final_string, make_string); // копируем make_string в final_string
                    final_string = strcat(final_string, ","); // добавляем запятую
                    final_string_length = final_string_length + substr_length + 1; // считаем новую длину строки final_string
                    i++; //увеличиваем позицию начала поиска звёздочки

                    if (i < str2_length) { //ищем следующую *
                        ptr2 = strchr(substr_temp + i, '*');
                        i = ptr2 - substr_temp;
                        count = count + 2;
                        position = i + (final_string_length - count);
                    } else ptr2 = NULL;
                } else ptr2 = NULL;//дальше искать нет смысла


            }
            //добавляем последнюю запятую
            final_string = realloc(final_string, final_string_length + 1);
            final_string[final_string_length] = '\0';
            final_string = strcat(final_string, ",");
        }

        ++lines_down;
        ++lines_temp;
    }
    printf("%s\n", final_string);
    return 0;
}

Результат работы программы: Test_Value_1,4334,Test_Value_2,Test_Value_3,,

Ожидаемый результат: Test_Value_1,4334,Test_Value_2,5467,Test_Value_3,34543,

На четвертом цикле position = 49 и сюда не попадает:

if (position < str1_length) {
    ptr1 = strchr(*lines_down + position, '<');

 ,

sniper21
()

Хорошие уроки по GIMP для начинающих

Форум — Talks

Интересует курс по GIMP для начинающих с последовательным изложением желательно безвозмездный :)

Посоветуйте, пожалуйста, что-либо.

Знаю только progimp.ru

 ,

sniper21
()

инициализация char **buffer; и Valgrind

Форум — Development

как ининциализировать?

char **buffer;
buffer = malloc(15 * sizeof(char*) + 1); // Valgring ругается фразой Uninitialised value was created by a heap allocation
for (int i = 0; i < 15; i++){
    buffer[i] = malloc(20 + 1);

    printf("%s", buffer[i]); // Valgring ругается фразой  Use of uninitialised value of size 8
}

// Освобождаю память так
for (int i = 0; i < 15; i++)
    free(buffer[i]);
free(buffer);

 , ,

sniper21
()

Цикл while по массиву строк C

Форум — Development

Есть массив строк:

char **stringsArray; 

Как записать цикл while по этому массиву строк.

while (stringsArray != '\0')
{
}

Так будет?

 ,

sniper21
()

Создание строки в C (СИ)

Форум — Development

Не могу найти внятного объяснения этого таинства.

Хочу создать пустую строку. Далее в коде в неё что-то записать (размер этого что-то неизвестен)

char *temp = NULL; //создаем указатель на будущую строку
int numofchars = 254; // 254 байта хватит всем


temp = (char*) malloc(numofchars+1); // выделяем память под нашу строку

strcpy(temp, "Privet, LOR");

...


free(temp);

Вопрос: правильно ли я всё делаю?

 ,

sniper21
()

QtCreator и динамическая линковка boost.log

Форум — Development

Из консольки компилируется хорошо при помощи:

g++ -std=c++11 main.cpp -DBOOST_LOG_DYN_LINK -lboost_log -lboost_thread -lpthread -lboost_system

Пытаюсь к QtCreator присобачить

LIBS +=  -L/usr/lib/x86_64-linux-gnu -DBOOST_LOG_DYN_LINK -lboost_log -lboost_thread -lpthread -lboost_system
Так не работает.

Не понимаю куда прибавить -DBOOST_LOG_DYN_LINK?

 , ,

sniper21
()

С какими опциями вы компилируете программы для продакшена в gcc или clang

Форум — Development

Собственно САБЖ.

 

sniper21
()

Я разрабатываю коммерческое ПО при помощи:

Форум — Talks
  • IDE (указать лицензию)
  • система сборки (указать лицензию)
  • компилятор (указать лицензию)
  • отладчик (указать лицензию)
  • профайлер (указать лицензию)
  • статический анализатор (указать лицензию)

 

sniper21
()

Преобразовать cout.write(text, text_size) в ncurses printw()

Форум — Development
char text[length];
size_t text_size;

cout << cout.write(text, text_size) << endl;

Вывести этот текст в ncurses при помощи printw

 ,

sniper21
()

Курсы по программированию. Стоит ли?

Форум — Talks

Кто посещал? Есть ли смысл или все это ерунда?

 ,

sniper21
()

постоянная синхронная отправка запросов и получения ответов

Форум — Development

Взял пример отсюда: И отсюда:

Скрестил ужа с ежом:

int main(int argc, char* argv[])
{

    boost::asio::io_service io_service;
    boost::asio::ip::tcp::endpoint endpoint (boost::asio::ip::address::from_string("192.168.0.1"), 1234);
    boost::asio::ip::tcp::socket sock(io_service);
    sock.open(boost::asio::ip::tcp::v4());
    sock.connect(endpoint);

    for (int i=0;i<2;i++){
            std::cout << "Enter message: ";
            char request[max_length];
            std::cin.getline(request, max_length);

            size_t request_length = strlen(request);
            sock.write_some(boost::asio::buffer(request, request_length));

            char reply[max_length];

            size_t reply_length = sock.read_some(boost::asio::buffer(reply, 1024));

            std::cout << "Reply is: ";
            std::cout.write(reply, reply_length);
            std::cout << "\n";
    }
  return 0;
}

первый раз срабатывает на отличненько, а на второй не получаю ответа.

Задача: постоянно опрашивать синхронно объект.

 , ,

sniper21
()

куда вписывать строку запроса в boost::asio -> tcp?

Форум — Development
tcp::resolver::query Query("192.168.0.1", "5000", "tcp");

tcp::resolver::iterator EndPointIterator = resolver.resolve(Query);

Выставляем в Boost IP, port и tcp, согласно документации

Вопрос: куда вписывать строку запроса, например «info»?

 , ,

sniper21
()

как в QtCreator подключить Boost::asio?

Форум — Development

Пытаюсь скомпилировать пример

TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
INCLUDEPATH += /usr/include/boost148
SOURCES += main.cpp
include <iostream>
#include <boost148/boost/array.hpp>
#include <boost148/boost/asio.hpp>
#include <boost148/boost/date_time/posix_time/posix_time.hpp>

using std::cout;
using std::endl;
using namespace boost::asio;

int main()
{
        io_service io;

        deadline_timer t(io, boost::posix_time::seconds(5));
        t.wait();
        cout << "Hello, World!" << endl;


        return 0;
}

Видать линкер не может чего-то найти, а чего не может не говорит.

undefined reference to boost::system::generic_category()
undefined reference to boost::system::generic_category()
undefined reference to boost::system::generic_category()
undefined reference to boost::system::generic_category()
undefined reference to boost::system::generic_category()
undefined reference to pthread_key_create
undefined reference to pthread_key_delete

...
...

гуглил, по результатам добавил

LIBS += -lboost_system

Стало так cannot find -lboost_system

yum install boost148-system

Package boost148-system already installed :(

 ,

sniper21
()

Когда код становится legacy?

Форум — Talks

Вот правда интересно, то тут то там legacy, legacy.

А какие параметры говорят нам что код не свеж?

Где та точка которая говорит нам что вчера код был ещё огого, а сегодня он уже legacy?

Использование старого компилятора, старых либ? Так новое ПО пишут под старые компиляторы ибо их трудно заменить.

 ,

sniper21
()

ходить на cgit по IP

Форум — Admin

Настраиваю cgit + apache2 на Debian по статье отсюда:

есть IP: 111.222.333.444

ОС debian

cgit из пакетов

Хочу ходить на cgit так http://111.222.333.444/cgit

<VirtualHost *:80> 
    ServerName 111.222.333.444
    DocumentRoot /home/projects/www/cgit
    DirectoryIndex cgit.cgi
    SetEnv CGIT_CONFIG /etc/cgitrc

    <Directory "/home/projects/www/cgit">
        Options FollowSymlinks ExecCGI
        Allow from all
        AllowOverride all
        Order allow,deny

        <Files cgit.cgi>
            SetHandler cgi-script
        </Files>
    </Directory>

    <Directory "/home/projects">
        Allow from all
    </Directory>
</VirtualHost>

Вместо ServerName подставляю IP Это правильно?

 , ,

sniper21
()

Если вы пишете на c++98/99, то какие ограничения не позволяют вам перейти на c++11/14/17?

Форум — Talks

Я могу придумать только одно и одно с большой натяжкой:

На какой-то embedded железке нельзя обновить ос и компилятор. Ну или начальство не разрешает... что странно.

Какие есть ещё? И да, разумеется разработка под Linux.

 ,

sniper21
()

&_#_13 что это за код?

Форум — Web-development

Если убрать «подчеркивания» то что это за код? line break?

 , special chars

sniper21
()

библиотека для TCP/IP сокет подключений

Форум — Development

Собственно, порекомендуйте, пожалуйста, библиотеку для TCP/IP сокет.

cURL?

есть ещё что?

А, да, условие: поддержка GNU/Linux, MS Windows

Язык: С++

 , ,

sniper21
()

Книга по безопасности

Форум — Talks

В связи с Meltdown и Spectre — названия двух атак на процессоры Intel/AMD/ARM64/Power и прочими ME, PSP

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

Посоветуйте?

 , ,

sniper21
()

Как правильно создают интерфейсы на Qt?

Форум — Development
  • программно
  • дизайнером интефейсов

Как создаёте интерфейсы вы?

 ,

sniper21
()

RSS подписка на новые темы