MFC 와 콘솔 연동 관련해서 질문드립니다.
현재 Cstring을 사용하여 AccController에 있는 NewAcc를 이용하여 버튼을 누르면 값을 입력한 값을 list로 넘기고자 합니다.
현재 AccController.cpp의 NewAcc는
void AccController::NewAcc(CString name,CString money) { char szAccount[30]={0,}; srand((unsigned int)time(NULL));//초기화 int iRandAccount = (rand() % 100);//난수발생 sprintf(szAccount, "%d%d",iRandAccount,m_static_iSeq); AccData * object = new AccData(atoi(szAccount),atoi(money),name); m_AccManager->AddAcc(object); m_static_iSeq++; }
입니다.
질문 : 여기서 atoi 매개변수를 Cstring에서 const char*로 변환할 수 없다고 합니다. 어떻게 고치면 되나요?
질문 : 또한 지금 sprintf에서 에러가 나는데 이건 무시해도 되나요?
warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
이런 에러가 납니다..
이것을 받는 Button함수입니다.
void CrrDlg::OnBnClickedButton1() { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. UpdateData(TRUE); AccController::Getinstance(AccManager::Getinstance())->NewAcc(m_input1,m_input2); m_list.DeleteAllItems(); //std::map<int,AccData*>::iterator DataBegin() //std::map<int,AccData*>::iterator DataEnd() std::map<int,AccData*>::iterator itr; for(itr=AccController::Getinstance(AccManager::Getinstance())->DataBegin(); itr!=AccController::Getinstance(AccManager::Getinstance())->DataEnd(); itr++) { CString cstrtemp; cstrtemp.Format("%d",itr->second->Getm_iaccNum()); m_list.InsertItem(0,cstrtemp); m_list.SetItem(0,1,LVIF_TEXT,itr->second->Getm_cname(),0,0,0,NULL); cstrtemp.Format("%d", itr->second->Getm_imoney()); m_list.SetItem(0,2,LVIF_TEXT,cstrtemp,0,0,0,NULL); } m_input1=""; m_input2=""; m_input3=""; UpdateData(FALSE); }
여기서 지금 오류가 나고 있습니다.
error C2664: 'void ATL::CStringT::Format(const wchar_t *,...)' : 매개 변수 1을(를) 'const char [3]'에서 'const wchar_t *'(으)로 변환할 수 없습니다.
1> with
1> [
1> BaseType=wchar_t,
1> StringTraits=StrTraitMFC_DLL
1> ]
1> 가리킨 형식이 관련이 없습니다. 변환하려면 reinterpret_cast, C 스타일 캐스트 또는 함수 스타일 캐스트가 필요합니다.
Format관련해서 이런 오류가 납니다. Format을 저런식으로 쓰는게 아닌가요? 만약 아니라면 수정은 어떻게 해야하나요?
+추가
자답...추가질문
유니코드를 멀티바이트형으로 고쳐서 해결했습니다.
근데 제가 지금 button을 눌러서 입력을 할 때
값이 없어도 계속 이름 부분이 숫자로 들어가면서 입력이 됩니다.
이걸 막는 방법이 있나요?
댓글 달기