Ответы пользователя по тегу C
  • Как избавиться от ошибки сегментации в C?

    vabka
    @vabka
    Токсичный шарпист
    У вас массив av пустой.
    Вам нужно проверять, что в ac действительно будет 2, а в аргументах действительно числа.
    Ответ написан
    Комментировать
  • Какой компилятор для языка Си посоветуете?

    vabka
    @vabka
    Токсичный шарпист
    Раз используете wsl2, то используйте gcc из него.
    Ответ написан
    Комментировать
  • Почему добавляется лишний символ в массив?

    vabka
    @vabka
    Токсичный шарпист
    У вас память накладывается.
    Условно до вызова функции память выглядит так:
    Ivan \0Golubkov\0
    А после:
    Ivan Golubkovv\0
    Посмотрите, что творится с переменной surname и убедитесь

    Чтобы это исправить надо либо для name выделять заранее память побольше, либо при склеивании выделять новую память и возвращать на неё указатель.

    PS: Если не играться в "кто меньше строк напишет", то вот так будет гораздо понятнее:
    void append_str(char* first, char* second) {
      char* end_of_first = first;
      while(*end_of_first != '\0') {
        end_of_first++;
      }
      char* current = second;
      while(*current != '\0') {
        *end_of_first = *current;
        end_of_first++;
        current++;
      }
      *end_of_first = '\0'; // Самое важное
    }
    Ответ написан
    Комментировать
  • Параметры функции?

    vabka
    @vabka
    Токсичный шарпист
    Зачем передавать переменные-параметры в функцию, если можно писать глобальное объявление переменных?

    1. Чтобы избавлять от дублирования (ну вообще это сам смысл функций)
    2. Чтобы удобнее работать с этими функциями (сразу видишь, что функция от тебя ждёт)
    3. Чтобы нормально работало в многопоточной среде. (глобальные переменные и многопоток не совестимы)

    Ну вот например менее абcтрактный пример:
    int sum(int a, int b) { // всё отлично, всё понятно
      return a + b;
    }
    
    int a,b;
    // Каким образом мы поймём, что надо перед вызовом sum задать какое-то значение переменным a и b?
    // sum и её "параметры" a и b никак не связаны
    int sum() {
      return a + b;
    }
    
    int sum() { // а как в этом случае нам сложить две переменные? Как задать значения a и b??????
      int a,b;
      return a + b;
    }
    Ответ написан
    Комментировать
  • Как сменить директорию в C?

    vabka
    @vabka
    Токсичный шарпист
    Си-компилируемый язык, так что пути надо указывать компилятору. Информации о компиляторе нет, так что подсказать, как это делать невозможно.
    Ответ написан
  • Возможны ли классы в C?

    vabka
    @vabka
    Токсичный шарпист
    Да, просто в начало каждой структуры надо добавить поле, в котором в каком-то однообразном виде будут храниться указатели на функции.
    Более конкретные примеры тут все уже поскидывали
    Ответ написан
    Комментировать
  • Char как UTF 16?

    vabka
    @vabka
    Токсичный шарпист
    размер char зафиксирован стандартом, так что не выйдет его никак расширить. Как вариант - использовать char16_t или utf8 https://ru.wikipedia.org/wiki/C11
    Ответ написан
    Комментировать