Ich schreibe eine Funktion next_node
, die nächste Datei im Verzeichnis findet. Knoten nimmt ein Verzeichnis und einen Dateinamen als Eingabe.Segmentierung Fehlerprüfung strcmp
Ich will es NULL
zurück, wenn es keine andere Datei nach bname
oder wenn es ist "."
oder ".."
. Es gibt mir segmentation fault (core dumped)
NUR wenn es innerhalb der if
Anweisung von strcmp
läuft.
Können Sie das Problem erklären oder bitte eine Lösung geben?
Code:
#include <stdio.h>
#include <dirent.h> // DIR opendir() closedir() struct dirent readdir()
#include <string.h> // strcmp()
char *next_node(char *dname, char *bname) {
if (!strcmp(dname, bname)) {
// dname same as bname
return NULL;
}
DIR *dirp = opendir(dname);
struct dirent *direntp;
while (((direntp = readdir(dirp)) != NULL) && (strcmp(direntp->d_name, bname))) {
}
if ((direntp = readdir(dirp)) != NULL) {
// if d_name is "." or ".." return NULL
if ((strcmp(direntp->d_name, ".")) || (strcmp(direntp->d_name, ".."))) {
return NULL;
}
// it can reach here with no problem
closedir(dirp);
return direntp->d_name;
} else {
closedir(dirp);
return NULL;
}
}
int main() {
char *dname = ".";
char *bname = "test.c";
char *result = next_node(dname, bname);
printf("%s\n", result);
return 0;
}
Beginnen Sie mit einigen Fehlerprüfung ... speziell auf "opendir" –
Dieser Code macht keinen Sinn. Ihr Schleifenkörper ist leer. –
Die while-Schleife funktioniert, wenn die 'bname' und' dname' existieren. Ich habe 'bname' und' dname' überprüft, bevor ich die Funktion in einem anderen Teil meines Programms verwende. –