Хотелось бы скинуть на русском или на английском но увы, у меня линковщик почему-то говорит на украинском
export LANG=C в консоли где выполняется линковка должен решить эту проблему.невизначене посилання __stack_chk_fail_local
-fno-stack-protector -fstack-check=no чтобы компилятор не вставлял проверки и вызовы этой функции. См. fwrite(array, sizeof(int),array_quantity,in); ... while((num=fgetc(in))!=EOF){ // queue_push(&q,num); printf("%i ",num); }
в начале я добавляю числа 1 2 3 (пример) а из файла получаю 1000 2000 3000
В чем дело?
array_quantity элементов размером sizeof(int) каждый, а читаешь из файла посимвольно? 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 преобразует линейный индекс элемента из оригинального массива в индекс элемента в повёрнутом массиве.Пишу ОС (важно, не выйдет использовать stdarg)
А если вызывать такую функцию (с аргументами "test", 'q'):
void test(char* format, ...) { char* ptr = format; for (int i = -10; i < 10; i++) { putc(*(ptr+i)); } }
Ожидания были таковы, что хотя бы где-то должна была появиться буква q, чего не произошло.
void test(char* format, ...)
{
char *ptr = (char *)&format;
for (int i = -10; i < 10; i++)
{
putc(*(ptr+i));
}
}Как работает while ( !feof ( cfPtr ) )?
FILE * cfPtr = fopen( "test.txt", "rb" );
char temp;
for (;;) {
int read = fread( &temp, sizeof( char ), 1, cfPtr );
if (read == 1) {
printf("%c\n", temp);
} else {
if (feof(cfPtr)) {
/*случился конец файла*/
} else if (ferror(cfPtr)) {
/* случилась ошибка */
}
break;
}
} Это присваивание адреса первого байта массива {0, 0, 0, 0} указателю float?
что будет в i, после данных действий?
float* arr = (float []){0, 0, 0, 0};int i = *((int*)arr); проинтерпретирует память первого элемента массива как целое число и присвоит его значение i. По стандарту ieee754 нулевое значение типа float представляется в памяти как 4 нулевых байта, соответственно в i будет записан 0. как при работе с функциями из библиотеки GMP, считывать и сохранять данные в файл (и читать из файла) например используя Массивы?
как реализовать то что можно делать в командной строке:
ls > file1 > file2
ls | tee file1 file2Единственно что мне приходит в голову...вручную записывать в каждый fd.
Первые два работают нормально, но когда доходит до 3, он не выполняется и длина выводится 0?
scanf("%d", &n); зачитывает только один int из стандартного ввода. Если ты вводишь число и жмёшь enter, то конец строки остаётся в потоке ввода и читается gets'ом.scanf("%d ", &n); #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);char * suit [4] = { "Hearts", "Diamonds", "Clubs", "Spades" };
Как изменить строку, инициализированную при объявлении массива символьных указателей, с помощью scanf?
Как добавить программу на Си в автозагрузку Windows?
И еще: как искать информацию на ответы по Си, если я пишу в гугле "Си как добавить программу в автозагрузку", но везде появляется только С++? Нереально найти ответ.