我刚开始使用 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/