我正在尝试在程序中实现目录更改的功能,并且我想使用errno.h处理错误。
int main(void)
{
char directory[100];
scanf("%[^\n]", directory);
switch(chdir(directory))
{
case 0:
printf("\nSuccess\n");
break;
case EACCES:
perror("\nError ");
break;
case EIO:
perror("\nError ");
break;
case ENAMETOOLONG:
perror("\nError ");
break;
case ENOTDIR:
perror("\nError ");
break;
case ENOENT:
perror("\nError ");
break;
}
return 0;
}
它编译没有错误,并且我能够更改目录,因此case 0
可以正常工作。但是当出现错误时,我无法使其他情况起作用。
在chdir
的手册页上,据说在发生错误时,将返回-1
并正确设置了errno。我在Linux和Windows 7上都进行了测试。
答案 0 :(得分:4)
我认为您遇到的问题是返回值和errno
之间的区别。 errno
是全局变量,在errno.h
中声明。您想要的是这样的:
#include <stdio.h>
#include <errno.h>
int main(void)
{
char directory[100];
scanf("%[^\n]", directory);
if (chdir(directory) != 0) {
switch (errno) {
case EACCES:
perror("\nError ");
break;
/* ... */
}
}
}
您的交换机中有很多情况下确实做同样的事情,这也有些奇怪……我认为那是因为它们只是存根,并且您确实想在代码中以不同的方式处理不同的错误,但是如果没有,您可以放下开关并做类似的事情
if (chdir(directory) != 0) {
perror("\nError ");
exit(EXIT_FAILURE);
}