//程序选择的编码方式unicode 但是由于程序的一些函数需要调用ascii函数 只能共同调用
#include <windows.h>
#include <iostream>
using namespace std;
//查找文件辅助结构
struct fileName
{
char Fname[512];
fileName *pNext;
};
int main()
{
char *source = new char[512];
char *str = "weisong\\";
strcpy(source, str);
char *dest = new char[512];
fileName *pHead = dedaowenjianliebiao(source);
while(pHead->pNext)
{
strcpy(dest, source);
strcat(dest, pHead->Fname);
cout << dest << endl;
cout << pHead->Fname << endl;
pHead = pHead->pNext;
}
return 0;
}
fileName *dedaowenjianliebiao(char *path)
{
fileName *pHead = NULL;
WIN32_FIND_DATAA FD;
ZeroMemory(&FD,sizeof(WIN32_FIND_DATA)); //程序导致崩溃的地点 单步调试发现执行完此步path == null
HANDLE Hand;
char FilePath[512];
ZeroMemory(FilePath, 512);
fileName *p = new fileName;
ZeroMemory(p, sizeof(fileName));
fileName *pTemp = pHead = p;
strcpy(FilePath, path); //将路径复制给FilePath
if (FilePath[strlen(FilePath)-1] != '//') //判断最后是不是"/"
{
strcat(FilePath,"//*"); //要加/*才能浏览本文件夹,注意双引号与单引号
}
Hand = FindFirstFileA(FilePath, &FD);
if (Hand == INVALID_HANDLE_VALUE)
{
return NULL; //按照路径打开失败,则结束
}
else
{
while(true)
{
if (FindNextFileA(Hand, &FD))
{
//创建链表保存文件名
strcpy(p->Fname,FD.cFileName);
p = new fileName;
ZeroMemory(p,sizeof(fileName));
pTemp->pNext = p;
pTemp = p;
}
else
{
break;
}
}
}
FindClose(Hand);
return pHead;
}
以上问题让人很困惑 后来发现问题出现在以下地方
WIN32_FIND_DATAA FD;
ZeroMemory(&FD,sizeof(WIN32_FIND_DATA));
WIN32_FIND_DATAA的大小是WIN32_FIND_DATA它的一半 所以在清空的时候将path一起清空
导致复制的过程都失败了 程序崩溃了