Запитання з тегом «c»

C - мова програмування загального призначення, що використовується для системного програмування (ОС та вбудованих), бібліотек, ігор та крос-платформ. Цей тег слід використовувати із загальними питаннями, що стосуються мови C, визначеної стандартом ISO 9899 (остання версія, 9899: 2018, якщо інше не зазначено - також запити, пов’язані з версією тегів c89, c99, c11 тощо). C відрізняється від C ++, і він не повинен поєднуватися з тегом C ++ без раціональної причини.

8
Ефективний спосіб пошуку елемента
Нещодавно у мене було інтерв'ю, де вони задали мені " пошукове " запитання. Питання було: Припустимо, існує масив (додатних) цілих чисел, котрий кожен елемент є +1або -1порівняний із сусідніми елементами. Приклад: array = [4,5,6,5,4,3,2,3,4,5,6,7,8]; Тепер шукайте 7та повертайте його позицію. Я дав таку відповідь: Зберігайте значення у тимчасовому масиві, сортуйте …

13
Які програми слід використовувати для використання оператора препроцесора ## і що потрібно взяти до уваги?
Як згадувалось у багатьох моїх попередніх питаннях, я працюю через K&R і зараз працюю в препроцесорі. Однією з найцікавіших речей - те, чого я ніколи раніше не знав з жодної з попередніх спроб вивчити C - є ##оператор препроцесора. За даними K&R: Оператор препроцесора ## надає спосіб об'єднання фактичних аргументів …

7
Передача покажчика функції на інший тип
Скажімо, у мене є функція, яка приймає void (*)(void*)покажчик функції для використання як зворотний виклик: void do_stuff(void (*callback_fp)(void*), void* callback_arg); Тепер, якщо у мене є така функція: void my_callback_function(struct my_struct* arg); Чи можу я зробити це безпечно? do_stuff((void (*)(void*)) &my_callback_function, NULL); Я розглянув це запитання і ознайомився з деякими стандартами …

4
Чи вирівнюються змінні стеку за допомогою __attribute __ ((вирівняні (x)))?
у мене є такий код: #include <stdio.h> int main(void) { float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0}; printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]); } І я маю такий результат: 0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac Чому адреса a[0]не кратна 0x1000? Що саме __attribute__((aligned(x)))робить? Я неправильно зрозумів це пояснення? Я …

18
Як перетворити байтовий масив у шістнадцятковий рядок в C?
У мене є: uint8 buf[] = {0, 1, 10, 11}; Я хочу перетворити байтовий масив у рядок таким чином, щоб я міг надрукувати рядок за допомогою printf: printf("%s\n", str); і отримати (двокрапки не потрібні): "00:01:0A:0B" Будь-яка допомога буде вдячна.
88 c  string  hex 

14
Росте стек вгору чи вниз?
У мене є цей шматок коду на c: int q = 10; int s = 5; int a[3]; printf("Address of a: %d\n", (int)a); printf("Address of a[1]: %d\n", (int)&a[1]); printf("Address of a[2]: %d\n", (int)&a[2]); printf("Address of q: %d\n", (int)&q); printf("Address of s: %d\n", (int)&s); Вихід: Address of a: 2293584 Address of …
88 c  memory  stack 

4
Як працює бібліотека імпорту? Деталі?
Я знаю, що для вундеркіндів це може здатися цілком базовим. Але я хочу зробити це кристально чистим. Коли я хочу використовувати DLL Win32, зазвичай я просто викликаю API, такі як LoadLibrary () та GetProcAdderss (). Але нещодавно я розробляю DirectX9, і мені потрібно додати файли d3d9.lib , d3dx9.lib тощо. Я …
88 c++  c  windows  visual-c++ 

4
Як перерахувати файли в каталозі в програмі на С?
Я намагаюся написати ftp-сервер на Linux. У цьому питанні, як я можу перерахувати файли в каталозі на терміналі програмою С? Можливо, я можу використовувати функцію exec для запуску команди find, але я хочу ім'я файлу як рядок для надсилання клієнтської програми. Як я можу це зробити? Дякую за відповіді.
88 c  linux 

4
Чому rand () повторює номери набагато частіше на Linux, ніж на Mac?
Я реалізовував хешмап в C в рамках проекту, над яким я працюю, і використовую випадкові вставки для тестування, коли я помітив, що rand()в Linux, схоже, повторюються цифри набагато частіше, ніж на Mac. RAND_MAXє 2147483647 / 0x7FFFFFFF на обох платформах. Я скоротив її до цієї тестової програми, яка робить байтовий масив …
87 c  linux  macos  random 


5
Що саме означає "Objective-C - надмножина C більш суворо, ніж C ++"?
З того, що я там читав: Чому Objective-C не дуже популярний поза спільнотою Apple? Objective-C - це надмножина C (насправді набагато суворіша, ніж C ++), тому проблема зворотної сумісності не виникає. Все, що ви можете зробити в C, ви можете зробити в Objective-C. Бути надмножиною - це бінарне, як вагітність. …
87 c++  objective-c  c 

10
Чому printf (“% f”, 0); дати невизначену поведінку?
Заява printf("%f\n",0.0f); відбитки 0. Однак заява printf("%f\n",0); друкує випадкові значення. Я усвідомлюю, що демонструю якусь невизначену поведінку, але не можу зрозуміти, чому саме. Значення з плаваючою комою, в якому всі біти дорівнюють 0, все ще є дійсним floatзі значенням 0. floatІ intмають однаковий розмір на моїй машині (якщо це навіть …

19
Простий спосіб використовувати змінні типів переліку як рядок у C?
Ось що я намагаюся зробити: typedef enum { ONE, TWO, THREE } Numbers; Я намагаюся написати функцію, яка робила б випадок перемикання, подібний до наступного: char num_str[10]; int process_numbers_str(Numbers num) { switch(num) { case ONE: case TWO: case THREE: { strcpy(num_str, num); //some way to get the symbolic constant name …


12
Чи залишається актуальним TCHAR?
Я новачок у програмуванні Windows, і після прочитання книги Петцольда мені цікаво: чи все ще є гарною практикою використовувати TCHARтип і _T()функцію для оголошення рядків, або якщо я повинен просто використовувати рядки wchar_tі L""в новому коді? Я націлюся лише на Windows 2000 та новіші версії, і мій код буде i18n …
87 c++  c  windows  unicode  wchar-t 

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.