C将文件保存为`';文件名'$'\n';`带有“fopen”(文件名为“w”)`

C将文件保存为`';文件名'$'\n';`带有“fopen”(文件名为“w”)`,c,C,我已经有一段时间没有用C编程了,但我以前从未见过这种行为。似乎当我使用fopen(文件名,“w”)打开一个文件时由于某种原因,该文件保存为'filename'$'\n'。例如,如果文件名存储“c.txt”,程序运行后,ls将显示'c.txt'$'\n' 我正在使用fgets检索用户输入,但我已使用print语句验证文件名中的输入是否正确 我也找不到关于这个的任何搜索结果,但我试着编写一个简单的Python程序来创建一个文件,这样做没有问题 有人知道这种奇怪的行为从何而来吗?转换成答案 这可能意味

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

我正在使用fgets检索用户输入,但我已使用print语句验证文件名中的输入是否正确

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

有人知道这种奇怪的行为从何而来吗?

转换成答案


这可能意味着您使用或POSIX读取文件名时忘记删除尾随的换行符

使用:


如果新行存在,则安全地将其删除;如果不存在,则用null覆盖null。
\r
在显示Windows行结束符时可容纳它们(通常不会,但可能与您相关)。

这可能意味着您使用
fgets()
getline()
读取文件名,但忘记删除尾随的换行符。使用:
filename[strcspn(filename,“\n\r”)]='\0'
如果新行存在,则安全地删除它,如果不存在,则用null覆盖null。
\r
可容纳显示的Windows行结尾。谢谢@JonathanLeffler!成功了!
filename[strcspn(filename, "\n\r")] = '\0';