这可能只是一个语法问题,我做错了,但我不能为我的生活弄清楚,所以我道歉,如果这也是“嘿我为我调试代码!”
相关代码:
struct dirent *readDir;
DIR *dir;
dir = opendir(name);
if(dir == NULL) {
printf("No directory found with the name %s\n", name);
} else {
printf("directory named %s opened.\n", name);
while((readDir = readdir(dir)) != NULL) {
if(readDir->d_name != ".." || readDir->d_name != ".") {
printf("%s\n", readDir->d_name);
}
}
closedir(dir);
}
while循环中的if条件似乎不起作用,这是它产生的输出:
directory named test opened.
file2
.
test2
file1
..
如果我没有误会,if语句应该过滤掉。和..目录,但它没有。这样做的目的是成为一个递归目录遍历,但除非我能阻止它递归到。和..目录我无法继续前进。
基本上,我不知道怎么做字符串比较我猜?
答案 0 :(得分:5)
C不支持'!='或'=='进行字符串比较。使用strcmp
();
if(readDir->d_name != ".." || readDir->d_name != ".") {
应该是
if(strcmp(readDir->d_name, "..") && strcmp(readDir->d_name, ".")) {
// d_name is not "." or ".."
}
答案 1 :(得分:2)
以下是两个问题:
if(readDir->d_name != ".." || readDir->d_name != ".") {
首先,您无法在C中以这种方式比较字符串...您实质上是在检查字符串文字的地址是否与readDir->d_name
中的地址匹配。您需要使用strcmp()
之类的函数。
其次,当你或者像这样的条件时,只需要一个是真的使整个表达式成为真...而且d_name
不能等于“......”和“。”同时,即使字符串比较 正如您(可能)所期望的那样,整体表达式也始终为TRUE。
所以你需要这样的东西:
if (strcmp("..", readDir->d_name) && strcmp(".", readDir->d_name)) {
(因为当{em>不匹配时,strcmp()
返回非零值,并且您需要不匹配两个字符串。)