我尝试过这种循环的各种排列。
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
答案 0 :(得分:1)
在您链接的文件中,您将hrstdesc [] []定义为hrstdesc [MAX_ENTRIES] [MAX_ENTRIES](不是[50] [50])。 MAX_ENTRIES在同一个repo中可用的check_snmp_extras.h头中#defined为3。
奇怪的行为是由于每次循环迭代时hrstdesc [] []的溢出。
您的最终hrstdesc [1]是循环迭代1(/ home)中的前3个字符,后跟循环迭代2(/ var)中的前3个字符,后跟循环迭代3(/)中的一个字符