错误C2664:'strcpy':无法将参数2从'const wchar_t [9]'转换为'const char *'。如何解决此错误?

时间:2012-02-01 03:14:30

标签: c++ visual-c++

如何在编译以下代码时摆脱此错误?

#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

它提供所有转换错误;如何解决这些错误?

1 个答案:

答案 0 :(得分:3)

您的标题是strcpy,但您的代码和错误有FindFirstFile

无论如何,像这样声明你的缓冲区会有所帮助:

TCHAR chFolderpath[_MAX_PATH];

然后,您需要使用_tcscpy_tcscat代替strcpystrcat更好,#include <strsafe.h>和使用the string functions that protect against buffer overrun

关于AfxMessageBox,这不是标准的Windows功能。它是MFC的一部分,我想你是从一个使用MFC的例子中剪切和粘贴的。 Windows有一个MessageBox功能可供您使用,但您需要提供所有参数(父窗口,消息,标题,按钮)。