void get_disks(char * allDisks[])
{
char buf[128];
...
for (char *s = buf; *s; s += strlen(s) + 1)
{
...
allDisks[i] = s;
...
allDisks[7] = "ABC";
allDisks[8] = "DEF";
}
}
После прохождения массива функцией get_files список дисков исчезает, но "ABC" и "DEF" остаются.
Подскажите, почему так происходит, куда теряются первые строки и как исправить?
Так происходит потому что ты кладёшь в
allDisks
указатели на стековый массив
buf
, который разрушается после выхода из функции
get_disks
. А строчки "ABC" и "DEF" -- константные строчки, существуют всё время выполнения программы.
Исправить можно, например, выделив память для строчек, которые записываются в
allDisks
:
void get_disks(char * allDisks[])
{
char buf[128];
int i = 0;
GetLogicalDriveStringsA(sizeof(buf), buf);
for (char *s = buf; *s; s += strlen(s) + 1)
{
if (GetDriveTypeA(s) == 2 || GetDriveTypeA(s) == 3)
{
allDisks[i] = strdup(s);
++i;
allDisks[7] = "ABC";
allDisks[8] = "DEF";
}
}
}