Задать вопрос
@KeksikProg

Почему при передаче имени файла как аргумент функции я не могу его открыть?

Cчитываю имя файла в функции main и передаю в функцию input_from_file:
char file_name[10]; // переменная в которую записывается имя файла
	char  extension[6] = { ".txt\0" }; // переменная для расширения имени файла
	puts("Введите название файла в пределах 30 символов (без указания расширения файла)");
	scanf("%s", &file_name); // считываем имя файла
	printf("Имя файла: %s\n", file_name); // Выводим на экран имя файла

	size = input_from_file(file_name); // используем функцию, чтобы считать количество команд из файла

Внутри функции input_from_file использую strcat, чтобы соединить имя файла и его расширение:
int input_from_file(char filename) {
	char  extension[6] = { ".txt\0" };
	int size = 0;
	FILE* table_l;
	
	
	strcat(filename, extension);
	//printf("%s", filename);
	table_l = fopen(filename, "rt");

	while (!feof(table_l)) {
		if (fgetc(table_l) == '\n')
		size += 1;
	}
	fclose(table_l);
	return size;
}

Но выдает ошибку нарушение прав доступа при чтении по адресу...
Но когда я переношу все вот, что в main внутрь функции, то все работает как надо.
  • Вопрос задан
  • 126 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик на C++
    12 месяцев
    Далее
  • Академия Эдюсон
    Разработчик игр на Unreal Engine: тариф Базовый
    9 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++ расширенный
    12 месяцев
    Далее
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Смотрите внимателно на тип параметра в функции. Это char. Один символ, или число от 0 до 255. А вы потом рабоатете с ним, как со строкой (указателем на char). Вы передаете это число от 0 до 255 в strcat, он пытается записать что-то по адресу от 0 до 255 и, ожидаемо, падает.

Поставьте там звездочку.

Еще комментарии: ".txt\0". Терминирующий \0 ставить не надо, "" уже его ставит само. 10 символов на filename может не хватить.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
СПЕЦПО Санкт-Петербург
от 230 000 до 350 000 ₽
Uniscan Research Новосибирск
от 140 000 до 200 000 ₽
Базис-Центр Коломна
от 70 000 до 500 000 ₽