找不到任何文件

标签 c linux io ide

我刚开始使用 C。 在我的程序中,用户输入一个文件名,然后我检查该文件是否存在。

这是目前的代码:

    printf("Enter the file name:\n");
    char filename[50];
    fgets(filename, 50, stdin);
    printf("You have entered %s\n", filename);
    if( access(filename, F_OK ) == -1 )
    {
        printf("File not found/access denied.\n");
    }

在与程序本身相同的目录中,我有一个名为“steps”的文件。 但是,每当我输入 steps 或 ./steps 甚至 ~/steps 时,我都会收到找不到文件的错误消息。

这里有什么问题?

顺便说一句,我在 Linux (Ubuntu) 上。 此外,我确定我有权访问该文件 - 所以这不是权限问题。

最佳答案

fgets 在缓冲区中包含尾随换行符,因此 access 认为这是文件名的一部分。您需要去掉换行符。

在 fgets 之后,添加以下行:

if (filename[strlen(filename)-1] == '\n') filename[strlen(filename)-1] = '\0';

将其剥离。

编辑:正如@alk 指出的(谢谢),这应该是:

if (strlen(filename) > 0 && filename[strlen(filename)-1] == '\n')
    filename[strlen(filename)-1] = '\0';

&& 如果左侧的计算结果为 false,则不会对右侧进行计算,因此不可能超出数组边界。

关于找不到任何文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19069369/

相关文章:

c++ - 在 C++ 中使用字符指针将字符串保存到类属性

c - Lua C API 和 lua_newuserdatauv 函数中的用户值具体是如何工作的?

linux - 无需安装即可从驱动器访问数据

file - 如何在文件开头添加一行?

java - 在Java中将大于2GB的文件读入内存

linux - Yocto 与 Jethro 2.0 和 meta-altera

c - 如何根据我的需求结束 do while 循环?

c - Web 浏览器不解释通过无符号字符数组传递的图像

objective-c - 以编程方式获取 Mac 上所有正在运行的进程的列表

c - 来自对象符号表的结构成员详细信息