我不太擅长C编程。因此,当我编写此递归函数时,我遇到了分段错误(内核已转储)。
int ispra(char* dir, char* proc, int num, int origin) {
FILE *newfile;
//printf("%s\n", dir);
char* s;
char* buff;
s = (char*) calloc(100, sizeof(char));
strcpy(s, dir);
strcat(s, "/");
strcat(s, proc);
strcat(s, "/status");
newfile = fopen(s, "r");
while(1) {
buff = (char*) calloc(100, sizeof(char));
int pid;
char* gran = (char*) calloc(10, sizeof(char));
int ppid;
fscanf(newfile, "%s", buff);
if (strcmp(buff, "Pid:") == 0) {
fscanf(newfile, "%d", &pid);
if (pid == num) {
return 1;
}
}
if (strcmp(buff, "PPid:") == 0) {
fscanf(newfile, "%s", gran);
ppid = atoi(gran);
if (ppid == origin) {
return 0;
}
int new = ispra(dir, gran, num, origin);
break;
}
free(buff);
}
free(s);
return -1;
}
因此,基本上,该函数从给定文件中读取并查找与变量num匹配的内容。在添加递归调用之前,所有方法都工作正常。递归调用用于获取变量new。 进行递归调用时,我遇到了错误,也不知道如何使它起作用。