#include<stdio.h> #include<dirent.h> int main(int argc,char*argv[]) { DIR *dp=NULL; struct dirent *dirp=NULL; if(2!=argc) { printf("usage:is directory_name\n"); } if(NULL==(dp==opendir(argv[1]))) { printf("can't open %s\n",argv[1]); } while(NULL!=(dirp==readdir(dp))) { printf("%s\n",dirp->d_name); } closedir(dp); return 0; }这个代码有没问题
时间: 2024-03-11 09:49:30 浏览: 38
基于c++的多线程拷贝技术
这段代码有一些问题:
1. `dp==opendir(argv[1])` 这里使用了双等号,应该改为单等号,否则会将 `dp` 赋值为 `opendir(argv[1])` 的比较结果,导致 `dp` 始终为 NULL。
2. 在调用 `readdir` 函数之前,应该先判断 `opendir` 函数是否成功打开了目录,否则会出现空指针错误。
3. 在循环中,应该先判断 `readdir` 函数返回的指针是否为空,否则会出现空指针错误。
4. 在程序结束前,应该先判断 `dp` 是否为空,否则会出现空指针错误。
下面是修改后的代码:
```c
#include <stdio.h>
#include <dirent.h>
int main(int argc, char *argv[]) {
DIR *dp = NULL;
struct dirent *dirp = NULL;
if (argc != 2) {
printf("usage: is directory_name\n");
return 1;
}
dp = opendir(argv[1]);
if (dp == NULL) {
printf("can't open %s\n", argv[1]);
return 1;
}
while ((dirp = readdir(dp)) != NULL) {
printf("%s\n", dirp->d_name);
}
closedir(dp);
return 0;
}
```
修改后的代码中,在调用 `opendir` 函数和 `readdir` 函数之前先进行了错误检查,避免了程序出现空指针错误。同时,在程序结束前也进行了错误检查,确保 `dp` 不为空。
阅读全文