Ошибка C2664: «strcpy»: невозможно преобразовать параметр 2 из «const wchar_t [9]» в «const char *». Как решить эту ошибку? - PullRequest
0 голосов
/ 01 февраля 2012

Как мне избавиться от этой и других ошибок при компиляции приведенного ниже кода?

#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 Ответ

3 голосов
/ 01 февраля 2012

Ваш заголовок говорит strcpy, но ваш код и ошибки имеют FindFirstFile?

В любом случае, объявление вашего буфера следующим образом поможет:

TCHAR chFolderpath[_MAX_PATH];

Тогда вы будетехотите использовать _tcscpy и _tcscat вместо strcpy и strcat. Еще лучше #include <strsafe.h> и использовать строковые функции, которые защищают от переполнения буфера .

Что касается AfxMessageBox, это не стандартная функция Windows.Это часть MFC, я полагаю, вы вырезали и вставили из примера, который использовал MFC.В Windows есть функция MessageBox, которую вы можете использовать, но вам нужно будет указать все параметры (родительское окно, сообщение, заголовок, кнопки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...