Не понятное в языке программирования С - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Собрал разные свои вопросы касательно языка программирования С. Если не трудно - просьба объяснить: 1. как в С создать массив строк? Вот такой код не проходит компиляцию
unsigned char str_array[50][50];
 
str_array[0][50] = "First string";
str_array[1][50] = "Second string";
.
.
.
str_array[49][50] = "Final string";
почему он не работает? 2. Часто при запуске скомпилированных программ с С с помощью компилятора tcc через 2-3 сек. в ОС windows7 появляется окошко с ошибкой "Обнаружена ошибка! Приложение будет закрыто. Приносим извинения за неудобства" то есть обычный отчет о ошибке в программе. Что это такое, и, как этого избежать? Почему появляются такие сообщения? 3. Можно как то по-подробнее объяснить как работают приложения на языке С в среде операционной системы? В виде любых UML диаграмм либо чего угодно. Приложение работает так что имеет доступ только к функциям winapi и все? С драйверами общается посредством встроенного установленного драйвера? Не могу понять именно как устроенна операционная ситстема и не знаю как в этом всем разобраться. Целые тома посвященные ОС в 800 страниц читать не хочется. Можно как то самому в это въехать? 4. Как пользоваться встроенным ассемблером в коде С? Где можно описание этого стандарта? Почему в асемблерных вставках в коде не работают команды IN, OUT для работы с портами ввода вывода? Хотел помигать светодиодами клавиатуры с программы на С но не получилось, что-то вообще ноль реакции. Здесь говорят что программа работает в защищенном режиме, и углубится к оборудованию не получится, да? Есть разные уровни привилегий в операционной системе, в процессоре, какие то "кольца" возможностей. 5. Верно ли сказать что компилятор языка С (здесь имеется ввиду - tcc) использует функции операционной системы для реализации таких математических функций как pow, sin, cos, и т.д.? То есть в нем реализовано это все независимо от операционной системы, автономно? Либо, компилятор как то использует то что содержится в операционной системе? То что создано корпорацией microsoft Интересно узнать то же самое но о linux. Короче с пониманием операционной системы полная тьма - ничего понять не могу. Можно разобраться в устройстве как то, по-быстрому и эффективно? Спасибо! 6. Пытался просмотреть скомпилированный код С компилятором tcc в дизасемблере ollydbg, специально там в исходнике добавлял данные в виде строк, но однако которые в hex дампе кода программы вообще не нашел! Почему так происходит? Куда деваются данные с программы? Они там должны содержатся а их нет. 7. Есть ли специально созданные для языков С/С++ библиотеки реализующие работу с массивами? Удобный инструмент работы с массивами: сортировка разная и прочее. Не называться ли эта библиотека случайно C arrays? 8. Как можно поэкспериментировать и пообщаться с оборудованием напрямую с программы на С? С любым оборудованием: принтер, сканнер, радиомодем, компьютерная мышь, экран, жесткий диск, карта памяти - любое оборудование. Жаль, конечно, что мало кто с изготовителей оборудования не публикует в интернете информацию о том как с ним работать, документацию, дата-шиты или как там их называют. Как же тогда быть? 9. Простенький вопрос. Как проще всего задать иконке скомпилированной программе на С свой любой значек? Как установить для значка программы иконку любую? 10. Простенький вопрос. Что такое библиотка *.dll? Как их создавать в компиляторе? Можно ли просмотреть как они работают в дизассемблере? После установки программы в её каталоге в Program Files появлется куча *.dll файлов, не понятно что это и как это создается и работает. 11. Простенький вопрос. Как кучу файлов программы объединить в одном значке? Что бы было не много файлов а одна программа, один значек и все. Может быть вопросы 9-10 слишком тупые, ссори. 12. Можно где то найти полный справочник по winapi на русском в формате chm? Что бы самый-самый полный, со всем необходимым. А то совсем не понятно как создавать окна, кнопки, выпадающие списки, радио кнопки, диалоговые окна и все остальное. Хорошо какие то примеры если бы были. Да и не понятно под какой язык программирования идет этот справочник по winapi. Он один для всех языков программирования? 13. Как создавать не стандартные окна windows через использование winapi а свои собственные стилизованные? Часто в программах не стандартный winapi оконный интерфейс а свой оригинальный красиво нарисованный, как это все создается? 14. Где можно найти мировой C-сборник библиотек работы со всем-всем-всем: декодеры/кодеры видео и звука, работы с изображениями, для создания 3D моделей, шифрования информации, алгоритмы расчета контрольных сумм и прочего? Есть в интернете какой то большой грамотный сборник таких функций на языке С? 15. Как в программе на С реализовать вычислительную много поточность? 16. Как в программе на С реализовать сетевую много поточность? 17. Как в ассемблерных вставках на ассемблере работать с много ядерными процессорами? Просто распаралелить задачу на два ядра? Так это реализуется? 18. Как можно реализовать ф-ю eval в программе на С? То есть создаешь строку обычную а она работает как программа: обычная строка данных превращается в программу. 19. Очень хочется получить ответ на этот вопрос. Как менять видео режимы видео карты на прямую либо через драйвер и как потом выводить графические спрайты (картинки) на экран? 20. Как работать с сетью с использованием языка программирования С? Сетевое программирование на С. 21. Почему не работает такой код:
#define ARRAY_LENGTH 50
 
unsigned char str_array[ARRAY_LENGTH];
22. В процессе компиляции программ на С там где идет вывод с русским языком он отображается абракодаброй. Как это можно исправить? Короче говоря не работает отображение кириллицы в консольных приложениях. - В процессе изучения языка программирования С стандарта 89 года по книге Гербердта Шилдта размещаю свою коллекцию функций на языке С. В коде чуть-чуть есть бардак. Хотелось бы узнать что не правильно там делал и какие-то рекомендации:
#include <iostream.h>
 
// Коллекция моих функция реалзованых на С(Си)
 
// substr, str_replace, assembler_test, sp_to_dash, 
// hash_generation, str_all_to_upper, str_all_to_lower
 
#define MY_FUNCTIONS_BUFFER_LENGTH 4096
 
unsigned char *substr(const char *str_subject, unsigned int str_start, unsigned int str_length);
 
unsigned char *substr(const char *str_subject, unsigned int str_start, unsigned int str_length) {
 
    // Эта функция работала почти корректно. Ничего не правильного не заметил.
 
    unsigned char substr_buffer[MY_FUNCTIONS_BUFFER_LENGTH];
                                               
    unsigned int substr_cnt = 0;
 
    while( substr_cnt < str_length ) {
        
        substr_buffer[substr_cnt] = *(str_subject + str_start + substr_cnt);
    
        substr_cnt ++;      
    }
 
    substr_buffer[substr_cnt] = '\0';
 
    return substr_buffer;
}
 
#define MY_FUNCTIONS_BUFFER_LENGTH 4096
 
unsigned char *str_replace(const char *str_search, const char *str_replace, const char *str_subject);
 
unsigned char *str_replace(const char *str_search, const char *str_replace, const char *str_subject) {
 
    // str_replace function testing begin.
 
    unsigned char *str_replace_buffer;
 
    str_replace_buffer = str_replace("{LABEL}", "/Replace/", "{LABEL}");
 
    printf("ex.: %s\n", str_replace_buffer);
 
    str_replace_buffer = str_replace("{LABEL}", "/Replace/", "{LABEL}{LABEL}{LABEL}");
 
    printf("ex.: %s\n", str_replace_buffer);
*
    str_replace_buffer = str_replace("{LABEL}", "/Replace/", "{LAB");
 
    printf("ex.: %s\n", str_replace_buffer);
 
    str_replace_buffer = str_replace("{LABEL}", "/Replace/", "test {LABEL}");
 
    printf("ex.: %s\n", str_replace_buffer);
 
    // str_replace function testing end.
 
    // функция str_replace почему так до конца достаточно и не работает. Работает с очень ошибками.
    // Надо ее доработать. Так же в эту функцию и в функцию substr, и во все остальные функции доработать
    // контроль ошибок когда один из параметров либо все либо выборочно не заданы либо ещё что то не так
    // так же доработать все свои остальные функции. Все.
 
    unsigned char returned_buffer[MY_FUNCTIONS_BUFFER_LENGTH];
 
    unsigned str_search_c = 0, 
        str_replace_c = 0, 
        str_subject_c = 0, 
     str_replace_buffer_c = 0,
         str_search_l = strlen(str_search),
        str_replace_l = strlen(str_replace),
        str_subject_l = strlen(str_subject);
 
    while( str_subject_c < str_subject_l ) {        
        
        while( * (str_subject + str_subject_c) == * (str_search + str_search_c) ) {
                                       
            str_subject_c ++;
    
            str_search_c ++;
        }
 
        if( str_search_c == str_search_l ) {
 
            while( str_replace_c < str_replace_l ) {
 
                        returned_buffer[str_replace_buffer_c] = * (str_replace + str_replace_c);
 
                str_replace_buffer_c ++;
 
                str_replace_c ++;
 
            }
        
            str_replace_c = 0;
        
        }
 
        if( str_search_c > 0 && str_search_c < str_search_l ) {
 
            str_subject_c -= str_search_c;
        }
 
        str_search_c = 0;
 
        // Важно, эта строка стояла в самом верху цикла и сильно влияла на работу модуля.
 
        returned_buffer[str_replace_buffer_c] = * (str_subject + str_subject_c);
 
        str_replace_buffer_c ++;
 
        str_subject_c ++;
    }
    
    returned_buffer[str_replace_buffer_c] = '\0';
 
    return returned_buffer;
}
 
void assembler_test(void);
 
void assembler_test(void) {
    
    unsigned char c = '0';
 
    printf("%x\n", &c);
 
    __asm__ __volatile__ (
        "movl $0x0018ff57, %eax\n"
        "addb $0x0f, (%eax)\n"
    );
 
    // ^ комманды call, out не работают, почему то
 
    printf("%c", c);
}
 
void sp_to_dash(char *str);
 
void sp_to_dash(char *str) {
 
    while(*str) {
        
        if(*str == ' ') {
            
            printf("-");
 
        } else {
 
            printf("%c", *str);
        }
 
        str++;
    }   
}
 
void hash_generation(unsigned char output_hash[], unsigned short int output_hash_length);
 
void hash_generation(unsigned char output_hash[], unsigned short int output_hash_length) {
 
    srand(time(0));
 
    unsigned short int current_hash_index, current_hash_segment_type, current_hash_segment;
 
    int current_hash_index = 0;
 
    while( current_hash_index < output_hash_length ) {
        
        current_hash_segment_type = 0 + rand() & 3 ;
 
        switch( current_hash_segment_type ) {
        
            case 0: 
                current_hash_segment = (char)(48 + rand() % 9);
                break;
 
            case 1:         
                current_hash_segment = (char)(65 + rand() % 25);
                break;
 
            default:
                current_hash_segment = (char)(97 + rand() % 25);            
        }       
 
        output_hash[current_hash_index] = current_hash_segment;
    
        current_hash_index ++;      
    }
}
 
void str_all_to_upper(char str[]);
 
void str_all_to_upper(char str[]) {
 
        int char_index;
    
    for( char_index = 0; char_index < strlen(str); char_index ++ ) {
        
        str[char_index] = toupper(str[char_index]);
    }
}
 
void str_all_to_lower(char str[]);
 
void str_all_to_lower(char str[]) {
 
        int char_index;
    
    for( char_index = 0; char_index < strlen(str); char_index ++ ) {
        
        str[char_index] = tolower(str[char_index]);
    }
}
 
unsigned long int ansi_c_89_strlen(unsigned char *subject);
 
unsigned long int ansi_c_89_strlen(unsigned char *subject) {
 
    unsigned long int char_index = 0;
 
    while( subject[char_index] != '\0' ) char_index ++;
    
    return char_index;
}
P.S.: Всякие *visual studio не интересуют. Все вопросы касательно компилятора tcc, только с ним хочу работать. БОЛЬШОЕ СПАСИБО ЗА ОТВЕТЫ!

Решение задачи: «Не понятное в языке программирования С»

textual
Листинг программы
#define ARRAY_LENGTH 50
 
unsigned char str_array[ARRAY_LENGTH];

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.9 из 5
Похожие ответы