0

我正在尝试使用 chdir 更改我的进程的工作目录。假设我的当前目录中有一个苹果目录。为什么当我在提示符中输入apple时返回的结果是-1?是不是因为当我输入apple时,'\n'字符也放在了字符串的末尾?此外,如果我可以使用变量来存储目录,那么更改目录的含义是什么?

#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<unistd.h>

int main(void){
    char path[256];
    fgets(path, 256, stdin);
    printf("%s", path);
    int result = chdir(path);
    if(result != 0){
        printf("%d\n", result);
    }
}
4

1 回答 1

4

fgets() 用可能(如果没有收到)为结果添加后缀EOF(如果没有收到)读取换行符(\n在 IXish 系统上)并将其传递给chdir()后者会使后者阻塞,因为要更改为大多数 likley 的目录名称不带有尾随换行符。

来自man fgets()我的斜体):

fgets()从流中最多读入一个小于 size 的字符,并将它们存储到 s 指向的缓冲区中。在 EOF 或换行符后停止读取。如果读取了换行符,则将其存储到缓冲区中。


关于调试的说明:如果您将要打印的“字符串”(由 读取fgets())放在这样的引号中

printf("'%s'", path);

您可能已经注意到尾随的\n.

于 2015-09-20T12:58:16.310 回答