我想允许用户键入要读取/写入的任何 .txt 文件的名称。
这是我的代码:
printf("Enter .txt file name\n");
scanf("%s",&fname);
FILE *inputf;
inputf=fopen(&fname,"w");
问题是此方法不起作用(具有 &fname)作为参数。
我可以想象它是因为 C 需要“filename.txt”才能工作......即使我输入例如:“custom.txt”,程序也会返回“存储块对于此操作来说不够大”的错误
完成此操作的正确方法是什么?
我使用 C 并且几乎使用基本命令..(不是太高级)
多谢 !!!
scanf 语句将尝试将作为输入输入的文件名存储到内存中,从作为第二个参数传递的地址开始。因此,您必须分配/保留一些内存并将其地址传递给 scanf。
由于您没有提到fname的类型,让我列出可能性然后回答您。
char fname;
scanf 的第二个参数和 fopen 的第一个参数都必须是 char *。因此,传递 fname 或 &fname 的地址是有效的。但它有一个问题。
当您声明“char fname”时,您仅保留 1 个字符的内存。当 scanf 尝试存储输入文件名时,它必须写入超过 1 个字符。所以最终你会覆盖一些其他的记忆。
char *fname;
在这种情况下,将 fname 传递给 scanf 和 fopen,而不是“&fname”。
但在使用 fname 之前,您必须分配一些内存(例如使用 malloc)。否则 fname 将包含一些垃圾地址,并且 scanf 将尝试覆盖一些随机内存。
所以要么将 fname 声明为char fname[N]
或字符*fname = malloc(N+1);
(其中 N 是您要输入的文件名的最大可能长度)。
然后,将 fname 传递给 scanf 和 fopen,如下所示:
scanf("%s",fname);
inputf = fopen(fname,"w");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)