Да, я предполагаю, что это идиотизм какой-то, но всё же, как?
при каждом выполнении разные результаты.
CBlocks getKeys(const std::string &key) { auto keys = explode_s(";", key); if (keys.size() < 3) { throw std::invalid_argument("size of keys has to be equal 3"); } DES_cblock Key1; DES_cblock Key2; DES_cblock Key3; strncpy((char*) Key1, keys[0].c_str(), keys[0].size()); strncpy((char*) Key2, keys[1].c_str(), keys[1].size()); strncpy((char*) Key3, keys[2].c_str(), keys[2].size()); return CBlocks(Key1, Key2, Key3); }
if (a == 1) { CreateProcess(szFileName, NULL, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi); WaitForSingleObject(pi.hProcess, INFINITE); ... } ... return 0;
запускается новый процесс но если его закрыть то закрывается и родитель.
IP адреса Source и Destination выводятся одинаковыми
The string is returned in a statically allocated buffer,
which subsequent calls will overwrite.
printf("src address: %s ", inet_ntoa(ip->ip_src));
printf("dest address: %s\n", inet_ntoa(ip->ip_dst));
Как можно реализовать, поворот динамического массива (матрица), без доп памяти?
#include <stddef.h>
#include <stdio.h>
typedef int T;
void rotate(T *p, size_t m, size_t n, size_t (*turn)(size_t m, size_t n, size_t idx))
{
size_t i, j, k;
for (i = 0; i < m * n; ++i) {
T tmp0, tmp1;
for (j = 0; j < i; ++j) {
for (k = turn(m, n, j); k != i && k != j; k = turn(m, n, k)) {
}
if (k == i)
break;
}
if (j < i)
continue;
tmp0 = p[i];
for (j = turn(m, n, i); ; j = turn(m, n, j)) {
tmp1 = p[j];
p[j] = tmp0;
tmp0 = tmp1;
if (j == i)
break;
}
}
}
void dump(size_t m, size_t n, T p[m][n])
{
size_t i, j;
for (i = 0; i < m; ++i)
for (j = 0; j < n; ++j)
printf("%d%s", p[i][j], j == n - 1 ? "\n" : ", ");
}
size_t turn_ccw(size_t m, size_t n, size_t idx)
{
return (n - 1 - idx % n) * m + (idx / n);
}
size_t turn_cw(size_t m, size_t n, size_t idx)
{
return (idx % n) * m + m - 1 - (idx / n);
}
#define M 5
#define N 7
int main()
{
size_t i, j;
T a[M][N];
for (i = 0; i < M; ++i)
for (j = 0; j < N; ++j)
a[i][j] = i * N + j;
rotate(&a[0][0], M, N, turn_ccw);
dump(N, M, (T (*)[M])&a[0][0]);
printf("\n");
rotate(&a[0][0], N, M, turn_cw);
dump(M, N, (T (*)[N])&a[0][0]);
}
turn
преобразует линейный индекс элемента из оригинального массива в индекс элемента в повёрнутом массиве.но почему, если мы его занулили в самом начале программы?
int i,k,w = 0;
// каким образом i учавствует в коде, если мы с ней
// ничего не делали?? если убрать это условие, код не работает
for(i=0; i<w; i++)
i++
, какое "ничего"?зачем в этом коде нужна переменная k,
Как это код работает?
ptr=strtok(s," ");
, в цикле for(i=0; i<w; i++)
проверяет, что подстрока состоит только из символов 'a'..'z', если да (т.е. i в цикле достиг длины текущей подстроки) -- печатает подстроку. Переходит к следующей подстроке тут: ptr=strtok(NULL," ");
Нужно из c++ переместить этот массив в ассемблерную вставку, а там уже перенести из этого массива в другой массив все элементы, которые равны сумме соседних.
То есть регистры e*x нельзя брать. Кто может подсказать, где найти материал по этой теме, либо же предложить пример кода для решения поставленной задачи?
#include <stdint.h>
void f(void)
{
uint32_t a[16] = {1, 2, 3, 1, 5, 4, -1, }, b[16] = {0};
void *a1, *b1;
uint32_t tmp, cnt = 14;
asm (
"lea %[a], %[a1]\n\t"
"lea %[b], %[b1]\n"
"1:\n\t"
"mov (%[a1]), %[tmp]\n\t"
"add 8(%[a1]), %[tmp]\n\t"
"cmp 4(%[a1]), %[tmp]\n\t"
"jne 2f\n\t"
"mov %[tmp], (%[b1])\n\t"
"add $4, %[b1]\n"
"2:\n\t"
"add $4, %[a1]\n\t"
"dec %[cnt]\n\t"
"jnz 1b\n\t"
: [cnt] "=&r" (cnt), [tmp] "=&r" (tmp),
[a1] "=&r" (a1), [b1] "=&r" (b1),
[b] "=m" (b)
: [a] "m" (a));
}
if (arr[i] <= arr[j]) { d[k] = arr[i]; da[k] = arr2[i]; i++; } else { d[k] = arr[j]; da[k] = arr2[i]; j++; }
std::string d[end - begin]; std::string da[end - begin];
как ускорить работу этого потока чтоб он использовал все ресурсы процессора?
что я не так сделал?
double** a = new double *[n];
int min;
for (int k = 0; k < n; ++k)
{
for (int j = 0; j < n; ++j)
{
cout << "Enter element:";
cin >> &a[k][j]);
}
}
#include <pty.h>
#include <unistd.h>
#include <thread>
#include <future>
#include <iostream>
#include <string>
ssize_t sz = 1;
int main()
{
int mfd;
pid_t pid_fork = forkpty(&mfd, NULL, NULL, NULL);
if (!pid_fork) {
// Дочерний процесс
execl("/bin/sh", "-", NULL);
} else {
// Родительский процесс
char buf[1024];
// Async
auto future = std::async(std::launch::async, [mfd]() {
std::string line;
while (sz) {
std::getline(std::cin, line);
line = line + "\n";
write(mfd, line.c_str(), line.size()); // Нужно направить в дочерний процесс как stdin
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
});
while (sz = read(mfd, buf, sizeof(buf))) {
write(STDOUT_FILENO, buf, sz); // Вывод из дочернего процесса stdout
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
exit(0);
}
}
...
#include <sys/ioctl.h>
...
struct winsize ws, *pws = NULL;
if (ioctl(1, TIOCGWINSZ, &ws) >= 0)
pws = &ws;
pid_t pid_fork = forkpty(&mfd, NULL, NULL, pws);
как быть? Какой размер массива объявить?
напрашивается вопрос "Будет ли конструктор базового класса A вызываться два раза, ведь в конструкторе C тоже вызывается конструктор A?".
A mem-initializer where the mem-initializer-id denotes a virtual base class is ignored during execution of a constructor of any class that is not the most derived class.