如何将* char复制到字符串的静态数组,printf产生奇怪的输出,

时间:2017-08-01 15:35:39

标签: c arrays char

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

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

1 个答案:

答案 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(/)中的一个字符