我试过这种循环的各种排列。

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个字符(/)。

09-12 18:55