WCHAR fileName[1];
- это массив из 1 символа, поэтому, если нулевое значение завершено, оно будет содержать только нулевой терминатор L'\0'
.
Какую функцию API вы вызываете?
Отредактировано
Элемент fileName
в FbwfCacheDetail
- это всего 1 символ, который является распространенным методом, используемым, когда длина массива неизвестна, а элемент является последним элементом в структуре. Как вы, вероятно, уже заметили, если ваш выделенный буфер имеет длину sizeof (FbwfCacheDetail)
, то FbwfFindFirst возвращает ERROR_NOT_ENOUGH_MEMORY
.
Так что, если я понимаю, что вы хотите сделать, выведите имя файла, не оканчивающееся NULL, используя fprintf. Это можно сделать следующим образом
fprintf (outputfile, L"%.*ls", cacheDetail.fileNameLength, cacheDetail.fileName);
При этом будут напечатаны только первые fileNameLength
символов fileName
.
Альтернативным подходом было бы добавить терминатор NULL в конец fileName. Сначала вам нужно убедиться, что буфер достаточно длинный, что можно сделать, вычтя sizeof (WCHAR)
из аргумента size
, который вы передаете в FbwfFindFirst. Поэтому, если вы выделите буфер в 1000 байтов, вы передадите 998 в FbwfFindFirst, зарезервировав последние два байта в буфере для вашего собственного использования. Затем, чтобы добавить терминатор NULL и вывести имя файла, используйте
cacheDetail.fileName[cacheDetail.fileNameLength] = L'\0';
fprintf (outputfile, L"%ls", cacheDetail.fileName);