Как сказано в « какой-то чувак-программист », fopen принимает char * (указатель на char), а не один char. Как он также заявил, подойдет использование массива.
Я просто скомпилирую его комментарии в ответ.
#include <stdio.h>
int main()
{
printf("Path/Name of the file: \n");
char filename[128];
scanf("%127s", filename);
FILE *filePointer = fopen(filename, "r");
return 0;
}
Я предлагаю вам использовать этот синтаксис scanf (% NUMBERs), чтобы избежать легкое переполнение буфера, которое может привести к краху sh и уязвимости безопасности. Не забывайте о дополнительном \ 0 для размера вашего буфера (я называю переменную имени файла вашим буфером) и будьте осторожны с пользовательским вводом в любом приложении с реальным словом, особенно когда это важно для чего-то столь же важного, как доступ к файлам. Имея доступ к этой программе, можно было бы просто открыть любой файл даже выше этого в дереве файлов, используя ../.
Я также предлагаю вам научиться читать вывод компилятора, так как это очень полезно для таких проблем one (не волнуйтесь, вы, естественно, должны выучить его со временем после того, как часто будете сталкиваться с подобными ошибками :)).
В вашем случае компилятор явно сообщает вам, что функции требуется char *, и вы даете ей char (здесь написано const char * restrict , но const и restrict здесь, чтобы сообщить вам, что указатель не будет изменен в функции).
expected ‘const char * restrict’ but argument is of type ‘char’
Надеюсь, вы понимаете лучше что было не так и что это было достаточно ясно!