【问题标题】:C saving files as `'filename'$'\n'` with `fopen(filename, "w")`C 使用 `fopen(filename, "w")` 将文件保存为 `'filename'$'\n'`
【发布时间】:2020-04-01 19:50:57
【问题描述】:

我已经有一段时间没有用 C 编程了,但我以前从未见过这种行为。似乎当我使用fopen(filename, "w"); 打开文件时,由于某种原因,文件被保存为'filename'$'\n'。例如,如果文件名存储“c.txt”,则一旦程序运行,ls 将显示'c.txt'$'\n'。

我正在使用 fgets 来检索用户输入,但我已经验证了文件名中的输入在打印语句中是正确的。

我也找不到任何关于此的搜索结果,但我尝试编写一个简单的 Python 程序来创建一个文件,它没有问题。

有谁知道这种奇怪的行为是从哪里来的?

【问题讨论】:

  • 这可能意味着您使用fgets() 或getline() 读取文件名并忘记删除尾随换行符。使用:filename[strcspn(filename, "\n\r")] = '\0'; 如果存在换行符,则安全地删除换行符,如果不存在则用 null 覆盖 null。 \r 适应 Windows 行尾(如果它们出现)。
  • 感谢@JonathanLeffler!成功了!

标签: c


【解决方案1】:

将comment 转为答案。

这可能意味着您使用 fgets() 或 POSIX getline() 读取文件名并忘记删除尾随换行符。

用途:

filename[strcspn(filename, "\n\r")] = '\0';

如果存在换行符,这将安全地删除换行符,如果不存在,则用 null 覆盖 null。 \r 可容纳 Windows 行尾(如果它们出现)(它们通常不会出现,但它可能与您有关)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2020-02-06
    • 2016-07-19
    • 2010-09-21
    • 2011-05-02
    相关资源
    最近更新 更多