输入要读取的自定义文件名?

NLe*_*Led 1 c file-io file

我想允许用户键入要读取/写入的任何.txt文件的名称。

这是我的代码:

  printf("Enter .txt file name\n");
  scanf("%s",&fname);
  FILE *inputf;
  inputf=fopen(&fname,"w");
Run Code Online (Sandbox Code Playgroud)

问题是此方法不能用作参数(具有&fname)。

我可以想象它的原因,因为C需要它才能正常工作,即使我输入例如“ custom.txt”,程序也会返回错误“存储块不足以执行此操作”

什么是实现此目的的正确方法?

我使用C,我几乎使用基本命令..(不太先进)

非常感谢 !!!

Suk*_*nto 5

scanf语句将从输入为第二个参数的地址开始,尝试将输入的文件名存储到内存中。因此,您必须分配/保留一些内存,并将其地址传递给scanf。

正如您没有提到fname的类型一样,让我列出可能性,然后回答您。

  1. char fname;

scanf的第二个参数和fopen的第一个参数都必须为char *。因此,fname或&fname的传递地址有效。但这有一个问题。

声明“ char fname”时,您仅保留1个char的内存。当scanf尝试存储输入文件名时,它将必须写入1个以上的字符。因此,最终您将覆盖其他一些内存。

  1. char *fname;

在这种情况下,将fname传递给scanf和fopen,而不是'&fname'。但是在使用fname之前,您必须分配一些内存(例如,使用malloc)。否则,fname将包含一些垃圾地址,scanf将尝试覆盖一些随机内存。

因此,可以将fname声明为char fname[N]或char *fname = malloc(N+1); (其中N是您要输入的文件名的最大可能长度)。

然后,将fname传递给scanf和fopen,如下所示:

scanf("%s",fname);

inputf = fopen(fname,"w");
Run Code Online (Sandbox Code Playgroud)