@Bahantay

Как избавиться от ошибки сегментации в C?

Доброго времени суток! Прошу помочь в сложившемся, имеется задание вывести прямоугольник с параметрами задаваемые вместе с "./a.out", допустим ./a.out 4 6 (4 - длина по вертикали 6 длина по горизонтали), при этом если просто ввести ./a.out без чисел, компилятор не должен выдавать ошибок. но у меня он выдает6013037a7cf44705265825.png6013038b61c40299484942.png код следующий
#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
char* line(unsigned len, char c1, char c2)
{
  char* buf = (char*)calloc(len + 1, sizeof(char));
  memset(buf, c1, len / sizeof(char));
  buf[0] = buf[len - 1] = c2;
  return buf;
}

int main(int ac, char **av)
{
    int x = atoi(av[1]);
    int y = atoi(av[2]);
    char* hf = line(x, '-', 'o');
  	char* ss = line(x, ' ', '|');

  	for (int idx = 0; idx != y; idx++)
    	printf("%s\n", (!idx || 1 + idx == y) ? hf : ss);
  
  	free(hf); 
  	free(ss);
  	return 0;

}
  • Вопрос задан
  • 154 просмотра
Решения вопроса 2
Ну, правильно выдается. Параметры командной строки отсутствуют, а вы обращаетесь к массиву av.
Надо проверять параметр ac на количество передаваемых аргументов командной строки.
Ответ написан
Комментировать
vabka
@vabka
Токсичный шарпист
У вас массив av пустой.
Вам нужно проверять, что в ac действительно будет 2, а в аргументах действительно числа.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы