регистр - блок ячеек памяти. Что такое регистровая память и чем отличается от обычной?
Собственно вопрос в теме.
Собственно вопрос в теме.
Вот код, который смотрит на строку из массива 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, '<');
Интересует курс по GIMP для начинающих с последовательным изложением желательно безвозмездный :)
Посоветуйте, пожалуйста, что-либо.
Знаю только progimp.ru
как ининциализировать?
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);
Есть массив строк:
char **stringsArray;
Как записать цикл while по этому массиву строк.
while (stringsArray != '\0')
{
}
Так будет?
Не могу найти внятного объяснения этого таинства.
Хочу создать пустую строку. Далее в коде в неё что-то записать (размер этого что-то неизвестен)
char *temp = NULL; //создаем указатель на будущую строку
int numofchars = 254; // 254 байта хватит всем
temp = (char*) malloc(numofchars+1); // выделяем память под нашу строку
strcpy(temp, "Privet, LOR");
...
free(temp);
Вопрос: правильно ли я всё делаю?
Из консольки компилируется хорошо при помощи:
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?
Собственно САБЖ.
char text[length];
size_t text_size;
cout << cout.write(text, text_size) << endl;
Вывести этот текст в ncurses при помощи printw
Кто посещал? Есть ли смысл или все это ерунда?
Скрестил ужа с ежом:
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;
}
первый раз срабатывает на отличненько, а на второй не получаю ответа.
Задача: постоянно опрашивать синхронно объект.
tcp::resolver::query Query("192.168.0.1", "5000", "tcp");
tcp::resolver::iterator EndPointIterator = resolver.resolve(Query);
Выставляем в Boost IP, port и tcp, согласно документации
Вопрос: куда вписывать строку запроса, например «info»?
Пытаюсь скомпилировать пример
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 :(
Вот правда интересно, то тут то там legacy, legacy.
А какие параметры говорят нам что код не свеж?
Где та точка которая говорит нам что вчера код был ещё огого, а сегодня он уже legacy?
Использование старого компилятора, старых либ? Так новое ПО пишут под старые компиляторы ибо их трудно заменить.
Настраиваю 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 Это правильно?
Я могу придумать только одно и одно с большой натяжкой:
На какой-то embedded железке нельзя обновить ос и компилятор. Ну или начальство не разрешает... что странно.
Какие есть ещё? И да, разумеется разработка под Linux.
Если убрать «подчеркивания» то что это за код? line break?
Собственно, порекомендуйте, пожалуйста, библиотеку для TCP/IP сокет.
cURL?
есть ещё что?
А, да, условие: поддержка GNU/Linux, MS Windows
Язык: С++
В связи с Meltdown и Spectre — названия двух атак на процессоры Intel/AMD/ARM64/Power и прочими ME, PSP
Хотелось бы книгу по выявлению уязвимостей, экскурс в старые методы взлома техники и прочая.
Посоветуйте?
| ← назад | следующие → |