我刚开始用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)上。 此外,我确信我可以访问该文件 - 所以这不是权限问题。
答案 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';