我正在尝试使用chdir来更改进程的工作目录。假设我当前目录中有一个苹果目录。为什么当我在提示符中输入apple时返回的结果为-1?是因为当我进入苹果时,' \ 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);
}
}
答案 0 :(得分:4)
fgets()
后缀的结果可能(如果没有收到EOF
)读取新行(IXish系统上的\n
)并传递给它到chdir()
使得后者的阻塞作为目录名改变为大多数,并不带有尾随的新行。
来自man fgets()
( italics by me ):
fgets()从流中读取最多一个小于大小的字符,并将它们存储到s指向的缓冲区中。读数在EOF或换行符后停止。 如果读取换行符,则将其存储到缓冲区中。
关于调试的说明:如果您要输入&#34;字符串&#34;打印(由fgets()
读取)在这样的引号中
printf("'%s'", path);
您可能已经注意到尾随\n
。