如何在编译以下代码时摆脱此错误?
#include "stdafx.h"
#include <string>
#include <vector>
#include <windows.h>
#include <atlstr.h>
#include <tchar.h>
#include <stdio.h>
#define MAX_PATH_LENGTH 256
int main(int argc, char *argv[])
{
int i;
char path[300];
bool FindFilesFromFolder();
getchar();
return 0;
}
bool FindFilesFromFolder()
{
HANDLE hFile;
WIN32_FIND_DATA FindFileData;
std::vector<char> fileList;
char chFolderpath[_MAX_PATH];
CString strExtension = _T("*.B11");
strcpy(chFolderpath, _T("F:\\test\\"));
strcat(chFolderpath, strExtension);
hFile = FindFirstFile(chFolderpath, &FindFileData);
if (hFile == INVALID_HANDLE_VALUE) {
AfxMessageBox(_T("Inavlid file handle."));
return false;
}
CString filepath;
do
{
filepath.Format(_T("%s%s"), _T("F:\\test\\"), FindFileData.cFileName);
fileList.push_back(filepath);
} while(FindNextFile(hFile, &FindFileData));
return true;
}
是的,这是了解findfirstfile()
正确用法的示例。我也遇到了strcpy
错误。
Error:error C2664: 'strcpy' : cannot convert parameter 2 from 'const wchar_t [9]' to 'const char *'. Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast.
Error: error C2664: 'strcat' : cannot convert parameter 2 from 'ATL::CString' to 'const char *'. No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called.
Error:error C2664: 'std::vector<_Ty>::push_back' : cannot convert parameter 1 from 'ATL::CString' to 'const char &' with
它提供所有转换错误;如何解决这些错误?
答案 0 :(得分:3)
您的标题是strcpy
,但您的代码和错误有FindFirstFile
?
无论如何,像这样声明你的缓冲区会有所帮助:
TCHAR chFolderpath[_MAX_PATH];
然后,您需要使用更好,_tcscpy
和_tcscat
代替strcpy
和strcat
。#include <strsafe.h>
和使用the string functions that protect against buffer overrun。
关于AfxMessageBox
,这不是标准的Windows功能。它是MFC的一部分,我想你是从一个使用MFC的例子中剪切和粘贴的。 Windows有一个MessageBox
功能可供您使用,但您需要提供所有参数(父窗口,消息,标题,按钮)。