gpt4 book ai didi

c - 为什么 opendir() 对一个字符串有效而不对另一个字符串有效?

转载 作者:太空宇宙 更新时间:2023-11-04 05:55:47 26 4
gpt4 key购买 nike

我想使用 opendir 打开一个目录,但我看到了一些意外的东西。 opendir 适用于从 getcwd 返回的字符串,但不适用于我的辅助函数 read_cwd 返回的字符串,即使这些字符串看起来是相等的。

如果我打印字符串,都打印 /Users/gwg/x,这是当前工作目录。

这是我的代码:

char real_cwd[255];
getcwd(real_cwd, sizeof(real_cwd));

/* This reads a virtual working directory from a file */
char virt_cwd[255];
read_cwd(virt_cwd);

/* This prints "1" */
printf("%d\n", strcmp(real_cwd, virt_cwd) != 0);

/* This works for real_cwd but not virt_cwd */
DIR *d = opendir(/* real_cwd | virt_cwd */);

这是read_cwd的代码:

char *read_cwd(char *cwd_buff)
{
FILE *f = fopen(X_PATH_FILE, "r");
fgets(cwd_buff, 80, f);
printf("Read cwd %s\n", cwd_buff);
fclose(f);
return cwd_buff;
}

最佳答案

函数 fgets 包括缓冲区中的最后一个换行符——因此第二个字符串实际上是 "/Users/gwg/x\n"

解决这个问题的最简单(但不一定是最干净)的方法是用 '\0' 覆盖换行符:在函数 read_cwd< 的末尾添加以下内容:

n = strlen(cwd_buff);
if(n > 0 && cwd_buff[n - 1] == '\n')
cwd_buff[n - 1] = '\0';

关于c - 为什么 opendir() 对一个字符串有效而不对另一个字符串有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27771887/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com