c- все статьи тега ➜ страница 16
Является ли snprintf () всегда нулевым завершением?
всегда ли snprintf null завершает буфер назначения? другими словами, достаточно ли этого: char dst[10]; snprintf(dst, sizeof (dst), "blah %s", somestr); или вы должны сделать так, если somestr достаточно долго? char dst[10]; somestr[sizeof (dst) - 1] = ''; snprintf(dst, sizeof (dst) - 1, "blah %s", somestr); меня интересует как то, что говорит стандарт, так и то, что может сделать какой-то популярный libc, который не является стандартным поведением. ...
C и C++: частичная инициализация автоматической структуры
например, если somestruct имеет три целых члена, я всегда думал, что это нормально, чтобы сделать это в C (или C++) функции: somestruct s = {123,}; первый элемент будет инициализирован до 123, а последние два будут инициализированы до 0. Я часто делаю то же самое с автоматическими массивами, пишу int arr[100] = {0,}; Так что все числа в массиве инициализируются к нулю. Недавно я прочитал в справочное руководство GNU C что: Если вы не инициализируете переменную структуру, эффект зависит ...
Почему argc - это ' int '(а не 'unsigned int')?
Почему аргументы командной строки подсчитывают переменную (традиционно "argc") и 'int' вместо 'unsigned int'? Есть ли для этого техническая причина? Я всегда просто игнорировал его при попытке избавиться от всех моих подписанных предупреждений о сравнении без знака, но никогда не понимал, почему это так. ...
Как скомпилировать.c файл с OpenSSL включает в себя?
Я пытаюсь скомпилировать небольшой .C файл, который имеет следующее включает в себя: #include <openssl/ssl.h> #include <openssl/rsa.h> #include <openssl/x509.h> #include <openssl/evp.h> в той же папке, где у меня есть .c файл у меня есть /openssl со всеми этими файлами (и более), Также в Synaptic package manager я вижу OpenSSL установлен, я пытаюсь скомпилировать с этим: gcc -o Opentest Opentest.c -lcrypto но я всегда получаю ошибки: error: openssl/ssl.h: No such f ...
Как отключить оптимизацию компилятора gcc, чтобы включить переполнение буфера
Я работаю над проблемой домашнего задания, которая требует отключения защиты оптимизации компилятора для его работы. Я использую gcc 4.4.1 на ubuntu linux, но не могу понять, какие флаги являются правильными. Я понимаю, что это зависит от архитектуры-моя машина работает с 32-разрядным процессором Intel. спасибо. ...
Использование функций min и max В C++
из C++, are min и max предпочтительнее fmin и fmax? Для сравнения двух целых чисел, они обеспечивают в основном ту же функциональность? вы склонны использовать один из этих наборов функций или предпочитаете писать свои собственные (возможно, для повышения эффективности, переносимости, гибкости и т. д.)? Примечания: библиотека стандартных шаблонов C++ (STL) объявляет min и max функции в стандартном C++ алгоритм заголовок. стандарт C (C99) обеспечивает fmin и fmax функция в стандартном C м ...
Рекурсивный системный вызов mkdir () в Unix
после прочтения справочной страницы mkdir(2) для системного вызова Unix с этим именем, кажется, что вызов не создает промежуточные каталоги в пути, только последний каталог в пути. Есть ли способ (или другая функция) создать все каталоги в пути, не прибегая к ручному разбору моей строки каталога и индивидуально создавая каждый каталог ? ...
производительность без знака против целых чисел со знаком
есть ли прирост/потеря производительности при использовании беззнаковых целых чисел над целыми числами со знаком? Если да, то это идет на короткий и длинный, а также? ...
Удаление комментариев из кода C / C++
есть ли простой способ удалить комментарии из исходного файла C/C++ без предварительной обработки. (т. е., я думаю, вы можете использовать gcc-E, но это расширит макросы.) Я просто хочу, чтобы исходный код с комментариями был удален, больше ничего не нужно менять. EDIT: предпочтение по отношению к существующему инструменту. Я не хочу писать это сам с помощью регулярных выражений, я предвижу слишком много сюрпризов в коде. ...
как получить идентификатор потока pthread в программе linux c?
в программе linux c, Как распечатать идентификатор потока потока, созданного библиотекой pthread? например: мы можем получить pid процесса по getpid() ...
Зачем заключать блоки кода C в фигурные скобки?
Я смотрю на некоторый код C и заметил, что он полон этих фигурных скобок, окружающих блоки кода без какой-либо структуры управления. Взгляните-ка: //do some stuff . . . fprintf(stderr, "%.2f secn", (float)(clock() - t) / CLOCKS_PER_SEC); { //a block! why not? char *tmp_argv[3]; tmp_argv[0] = argv[0]; tmp_argv[1] = str; tmp_argv[2] = prefix; t = clock(); fprintf(stderr, "[bwa_index] Convert nucleotide PAC to color PAC... "); bwa_pac2cspac(3, tmp_argv); fprintf(stderr ...
Как вызвать функцию C++ из C?
Я знаю это. вызов функции C из C++: Если бы мое приложение было на C++ , и мне пришлось вызывать функции из библиотеки, написанной на C. Тогда я бы использовал //main.cpp extern "C" void C_library_function(int x, int y);//prototype C_library_function(2,4);// directly using it. это не испортит имя C_library_function и компоновщик найдет то же имя в своем входе *.lib файлы и проблема решена. вызов функции C++ из C??? но здесь я расширяю большое приложение, которое является написан на C, и ...
Как использовать nanosleep() в C? Что такое `tim.tv sec 'and `tim.tv nsec'?
зачем tim.tv_sec и tim.tv_nsec в следующем? как я могу спать исполнения 500000 микросекунд? #include <stdio.h> #include <time.h> int main() { struct timespec tim, tim2; tim.tv_sec = 1; tim.tv_nsec = 500; if(nanosleep(&tim , &tim2) < 0 ) { printf("Nano sleep system call failed n"); return -1; } printf("Nano sleep successfull n"); return 0; } ...
В чем разница между приведением к `float` и добавлением `f` в качестве суффикса при инициализации `float`?
в чем разница между float f = (float) 99.32 ; и float f = 99.32f ; оба они были скомпилированы и успешно запущены. ...
Как установить тайм-аут сокета в C при создании нескольких соединений?
Я пишу простую программу, которая делает несколько подключений к разным серверам для проверки статуса. Все эти соединения построены по требованию; до 10 соединений можно создать одновременно. Мне не нравится идея одного потока на сокет, поэтому я сделал все эти клиентские сокеты неблокирующими и бросил их в пул select (). Он работал отлично, пока мой клиент не пожаловался, что время ожидания слишком долго, прежде чем они могут получить отчет об ошибке, когда целевые серверы перестал отвечать. ...
Как написать обработчик сигнала, чтобы поймать SIGSEGV?
Я хочу написать обработчик сигнала, чтобы поймать SIGSEGV. Я защищаю блок памяти для чтения или записи с помощью char *buffer; char *p; char a; int pagesize = 4096; mprotect(buffer,pagesize,PROT_NONE) это защищает байты размера страницы памяти, начиная с буфера, от любых операций чтения или записи. во-вторых, я пытаюсь прочитать память: p = buffer; a = *p это создаст SIGSEGV, и мой обработчик будет вызван. Пока все хорошо. Моя проблема заключается в том, что после вызова обработчика я ...
Как можно использовать уязвимость Format-String?
Я читал об уязвимостях в коде и наткнулся на это Уязвимость Format-String. Википедия говорит: ошибки строки формата чаще всего появляются, когда программист хочет печать строки, содержащей данные, предоставленные пользователем. Программист может ошибочно напишите printf (буфер) вместо printf ("%s", буфер). Этот первая версия интерпретирует буфер как строку формата и анализирует любые форматирование инструкции он может содержать. Вторая версия просто выводит строку на экран, как и ...
Может ли почти нулевое плавающее значение вызвать ошибку деления на ноль?
все знают, что вы не должны сравнивать поплавки напрямую, а скорее использовать допуск: float a,b; float epsilon = 1e-6f; bool equal = (fabs(a-b) < epsilon); мне было интересно, если то же самое относится к сравнению значения до нуля, прежде чем использовать его в делении. float a, b; if (a != 0.0f) b = 1/a; // oops? мне также нужно сравнить с Эпсилоном в этом случае? ...
gcc / g++: "нет такого файла или каталога"
g++ дает мне ошибки типа: foo.cc:<line>:<column>: fatal error: <bar>: No such file or directory compilation terminated. то же самое при компиляции C-программ с gcc. почему это? обратите внимание: этот вопрос задавался много раз раньше, но каждый раз он был специфичен для ситуации askers. Цель этого вопроса -есть вопрос, что другие могут быть закрыты как дубликаты, раз и навсегда; a часто задаваемые вопросы. ...
Можно ли перебирать аргументы в вариативных макросах?
мне было интересно, можно ли перебирать аргументы, переданные в вариационный макрос в C99 или используя любые расширения GCC ? например, можно ли написать общий макрос, который принимает структуру и ее поля, передаваемые в качестве аргументов, и печатает смещение каждого поля в структуре ? что-то вроде этого: struct a { int a; int b; int c; }; /* PRN_STRUCT_OFFSETS will print offset of each of the fields within structure passed as the first argument. */ int main(int argc, c ...