@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 внутрь функции, то все работает как надо.
  • Вопрос задан
  • 77 просмотров
Решения вопроса 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Смотрите внимателно на тип параметра в функции. Это char. Один символ, или число от 0 до 255. А вы потом рабоатете с ним, как со строкой (указателем на char). Вы передаете это число от 0 до 255 в strcat, он пытается записать что-то по адресу от 0 до 255 и, ожидаемо, падает.

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

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

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

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