Во-первых, вам не нужно определять
#define MAX_PATHNAME_LEN 260
Windows уже определяет
#define MAX_PATH 260
Во-вторых, если выдобавляется диск N:
, потому что это общий сетевой ресурс, он должен быть \\\\N:\\
, чтобы экранированная строка была \\N:\
.
В-третьих, вы действительно должны не бытьзапись в argv[]
.Стандарт C не предусматривает абсолютно никакой возможности его записи, и у вас нет возможности узнать, записываете ли вы конец буфера.Используйте это вместо этого:
char basePath[] = "\\\\N:\\Joe\\My Documents\\";
Ваш вызов snprintf(DirSpec, "%s\\*", argv[0]);
не включает длину буфера назначения, так что это вопрос, как это будет работать.Попробуйте
snprintf(DirSpec, MAX_PATH, "%s*", basePath);
Обратите внимание, что обратные косые черты были удалены из строки формата, поскольку подстановочный знак для содержимого каталога для функции FindFirstFile()
равен DirPath\*
, а базовый путь уже заканчивается обратной косой чертой.