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

2023-12-02

我想允许用户键入要读取/写入的任何 .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的类型,让我列出可能性然后回答您。

  1. char fname;

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

当您声明“char fname”时,您仅保留 1 个字符的内存。当 scanf 尝试存储输入文件名时,它必须写入超过 1 个字符。所以最终你会覆盖一些其他的记忆。

  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(使用前将#替换为@)

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

随机推荐

  • FFmpeg - PHP 错误代码 127

    我正在尝试从 php 执行 FFmpeg 我已经安装了FFmpeg php 并且扩展位于modules目录中 并且它显示在phpinfo中 FFmpeg 工作正常 因为我可以在终端中运行命令并输出视频 但是 当我尝试使用以下脚本从 php
  • 检查 SharePoint 365 中的工作簿是否已锁定进行编辑

    我在 SharePoint 365 中有一个文档库 我使用本地 Excel 宏文件通过 VBA 在线打开 SharePoint 中的工作簿 这适用于类似的代码 location https mycompany sharepoint com
  • 尝试使用 Python 和 Selenium 迭代地滚动和抓取网页

    我最近问了一个问题 参考这里 Python Web 抓取 Beautiful Soup Selenium 和 PhantomJS 仅抓取整个页面的一部分 这有助于确定我在抓取滚动时动态更新的页面的所有内容时遇到的问题 然而 我仍然无法使用
  • 使用pip在django中安装错误

    我是 Django 世界的新手 我想将其从 pip 安装到我的 Windows 中 但在安装时出现此错误 C Users xxxx gt pip install django Collecting django Could not inst
  • 在 Jdbc 中执行带有绑定变量的 SQL 查询

    我有一个这样的sql查询 select DEPT DEPTNO as DEPTNO1 DEPT DNAME as DNAME1 DEPT LOC as LOC1 EMP COMM as COMM1 EMP EMPNO as EMPNO1 E
  • Android:在 webview 中下载在 Oreo 中不起作用,它在 Oreo 设备中强制关闭

    下载管理器代码在 Android 中不起作用WebView适用于 Oreo 设备 但它适用于旧版本 如果不是 Oreo 设备 它会提示 正在下载文件 并被下载 但如果是 Oreo 它会强制关闭 崩溃 下面是我正在使用的代码 片段 webVi
  • 数字后跟大写 L

    什么是512L意思是 或者可能是任何数字后跟大写 L example uint sec然后是一些带有表达式的代码 sec 512L 取出来的XV6代码 mkfs c L代表long 这创建了一个类型的文字long l也可以 但看起来像1 所
  • 连接表上的 where 子句

    对于下表 ROOM ID NAME 1 ROOM 1 2 ROOM 2 房间状态 ID ROOM ID OPEN DATE 1 1 1 2000 01 01 00 00 00 2 2 1 2000 01 01 00 00 00
  • 向现有列添加自动增量,而不影响当前记录值

    我想将列类型更改为AUTO INCREMENT在现有的MyISAM1数据库表 数据库目前有数千条记录 其中列值非常重要 当前值不受影响至关重要 我想从最新的最高值开始递增 我在 phpmyadmin 中尝试了此操作 由 phpmyadmin
  • 编译 SCSS 时出现误报“未定义变量”错误

    使用 ruby compass gem 编译 SCSS 时收到错误消息 run var lib gems 1 8 gems compass 0 12 2 bin compass compile out unchanged sass part
  • 从 python dataframe 列中删除非 json 对象行

    我有一个数据框 该列包含 json 对象和字符串 我想删除不包含 json 对象的行 下面是我的数据框的样子 import pandas as pd df pd DataFrame A hello world a 5 b 6 c 8 usa
  • 仅支持横向界面方向

    我有使用横向右方向的应用程序 在视图控制器中我使用 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation interfaceOrientation Return
  • 系统 python 版本处于活动状态,而不是本地 pyenv 版本

    激活虚拟环境后如何检查使用的python版本是否正确 我尝试了which python3和which python 但两个输出都指示系统python版本而不是本地pyenv版本 它仍在使用我的本地版本还是我的安装有问题 这是命令行输出 Do
  • 如何根据 ViewModel 属性值添加淡入/淡出动画?

    我有一个视图模型它公开了字符串属性页面工具栏可见这可以是true or false private string pageToolBarVisible public string PageToolBarVisible get return
  • 有什么方法可以修改 JavaScript 中的“this”吗?

    我找到了这个答案 如何在javascript中修改 this 但我不喜欢它 肯定有办法somehow modify this 这是一个例子 function var a function v v 10 a function console
  • 标题栏颜色变化问题

    我想动态更改标题栏的颜色 即 有人单击按钮 它会更改颜色 但是 我似乎无法让它填满整个标题栏 这种情况在模拟器和 Nexus One 上都会发生 有任何想法吗
  • 在 Spark 中提取 hive 表分区 - java

    Spark 有没有办法只提取分区列名称 我使用的解决方法是运行 show extended table like table name using HiveContext 你可以使用类HiveMetaStore客户端直接查询HiveMeta
  • Pandas:对 NaN 值进行“或”运算

    我有一个包含 3 列的 DataFrame 每列的值为NaN 我想根据这 3 列填充第四列 这样or操作应用于列 如果第一个不是NaN 取其值 否则检查第二个 依此类推 自从一个NaN值不是一个False the or运算符不能按原样使用
  • 如何检测区域上方和下方的点?

    我有这个图像 其中红点是划分该阿拉伯语词段的不同字母的坐标 我想检测点之间区域上方或下方的点 点是 从左到右 81 183 80 217 83 275 83 314 现在字母上方有一个点 81 183 and 80 217 同样 上面的部分
  • 输入要读取的自定义文件名?

    我想允许用户键入要读取 写入的任何 txt 文件的名称 这是我的代码 printf Enter txt file name n scanf s fname FILE inputf inputf fopen fname w 问题是此方法不起作