Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 处理目录更改中的错误_C - Fatal编程技术网

C 处理目录更改中的错误

C 处理目录更改中的错误,c,C,我试图在我的程序中实现目录更改的功能,我想用errno.h来处理错误 int main(void) { char directory[100]; scanf("%[^\n]", directory); switch(chdir(directory)) { case 0: printf("\nSuccess\n"); break; case

我试图在我的程序中实现目录更改的功能,我想用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;
}
它编译时没有错误,而且我能够更改目录,因此
案例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);
}