找不到任何文件

时间:2013-09-28 16:52:56

标签: 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甚至〜/步骤时,我都会收到找不到文件的错误消息。

这里有什么问题?

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

2 个答案:

答案 0 :(得分:1)

fgets在缓冲区中包含尾随的New-Line,因此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将不评估右侧,因此没有机会超出数组范围。

答案 1 :(得分:1)

因为fgets()在空字符之前添加\n

例如,如果输入“abcd”,这将变为“abcd \ n”

读取文件名后,只需将\n替换为空字符

即可
 fgets(filename, 50, stdin); 

 if(filename[strlen(filename)-1]=='\n')
    filename[strlen(filename)-1]='\0';
相关问题