C 处理目录更改中的错误
我试图在我的程序中实现目录更改的功能,我想用errno.h来处理错误C 处理目录更改中的错误,c,C,我试图在我的程序中实现目录更改的功能,我想用errno.h来处理错误 int main(void) { char directory[100]; scanf("%[^\n]", directory); switch(chdir(directory)) { case 0: printf("\nSuccess\n"); break; case
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;
}
它编译时没有错误,而且我能够更改目录,因此案例0
有效。但当出现错误时,我无法让其他案例正常工作
在
chdir
的手册页上,据说在出现错误时,会返回-1
,并正确设置errno。我在Linux和Windows 7上都进行了测试,仍然没有任何结果。我认为您遇到的问题是返回值和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;
/* ... */
}
}
}
“…并且,
errno
被适当地设置。”-您的任何代码都不会实际检查它。如果您查看手册(总是好的),那么代码可能应该反映它对错误检测的说明。从chdir
的手册页中:“成功时,返回零。错误时,返回-1,并正确设置errno。”这一点如何不清楚?错误时返回-1。不是错误代码。它返回-1。错误代码存储在errno
中。我真的不明白怎么会更清楚。
if (chdir(directory) != 0) {
perror("\nError ");
exit(EXIT_FAILURE);
}