我试过这种循环的各种排列。
char hrstdesc[50][50];
char hrstread[50][50];
int i = 0;
for (hfree = hentry; hfree; hfree = hfree->prev) {
if (filterentry(hfree)) {
continue;
}
strcpy(&hrstdesc[i][0], hfree->hrstdesc);
printf("%s \n", hrstdesc[i]);
i++;
}
printf("%s \n", hrstdesc[1]);
输出是,
/run/media/username/archive
/home
/var
/
/ho/va/
前4行来自,
printf("%s \n", srtdesc);
,这是我所期望的。最后一行,我希望看到
/home
,但我得到/ho/va/
。https://github.com/techzilla/check_snmp_extras/blob/master/src/check_snmp_disks.c
最佳答案
在您链接的文件中,您将hrstdesc[][]定义为hrstdesc[MAX_ENTRIES][MAX_ENTRIES](而不是[50][50])。在同一回购协议中可用的check_snmp_extras.h头中将MAX_ENTRIES定义为3。
这种奇怪的行为是由于每次循环迭代时hrstdesc[][]的溢出造成的。
最后一个hrstdesc[1]是循环迭代1的前3个字符(/home),然后是循环迭代2的前3个字符(/var),最后是循环迭代3的前1个字符(/)。