검색결과 리스트
C++에 해당되는 글 3건
- 2019.07.04 C++ 에서 int 계산 결과 오류
- 2018.09.20 C++에서의 default 인자 주기
- 2015.02.03 CString을 char arry로 변환할때
기록으로 남기기 위해서.
int value = 300;
int usedStorage = 9267822;//단위 MB
int totalStorage = 29284517;//단위 MB
MVS2015 / QT5에서 하기 수식을 수행하면,
int result = ceil(value * usedStorage / totalStorage);// ERROR : -51
원하는 result를 얻으려면,
각각을 일정 값 이하로 줄인 다음에 비율을 구한다.
int temp_value = usedStorage / 1024;
int temp_storage = totalStorage / 1024;
result = ceil(value * temp_value / temp_storage);//8 !!!!!
함수 선언을..
void error(char const *msg, bool showKind = true, bool exit);
이런 식으로 하면 다음과 같은 애러가 뜨게 된다.
default argument not at end of parameter list
이것의 의미는 끝에 기본 값을 안 줬다 이며 이것을 해결하기 위해서는
끝에서부터 기본값을 주기 시작해야 한다는 의미이다.
exit도 기본 값을 주던지 아니면 showKind를 제일 뒤로 보내야 한다~
더 자세한 설명은 https://stackoverflow.com/questions/5637679/default-argument-in-the-middle-of-parameter-list
MFC UI에서 입력 받은 여러개의 CString 으로 받은 다음에 하나의 char arry로 바꾸는 작업을 위해서
방법 !
CString을 선언하고
strncpy로 복사하면 된다.
예
CString g_postSerialnum;
char temp_sn[12];
g_postSerialnum= _T("A0111010asdas");
strncpy(temp_sn, g_postSerialnum, 12);
만일 길이를 지정하지 않고 strcpy를 쓴다면?
strcpy(temp_sn, g_postSerialnum);
환경에 따라서 다르겠지만 MFC C++ / 2008에서는 함수 콜이 끝나면 죽는다
디버그에서는 안 죽고 릴리스에서만!!!
주의해서 써야 한다.
후썰...
이짓을 하게된 배경
<전임자코드>--------------------------------------------------------------
CString set_product_code1, set_product_code2, set_made_factory, set_made_date, set_made_year, set_product_num;
CString str;
//이 부분은 UI에서 얻어오는 부분이기때문에 일단 보류
m_sn_model_list.GetLBText(m_sn_model_list.GetCurSel(), set_product_code1);
m_sn_model_list1.GetLBText(m_sn_model_list1.GetCurSel(), set_product_code2);
m_mcnt_list.GetLBText(m_mcnt_list.GetCurSel(), set_made_factory);
GetDlgItemText(20012, set_made_date);
m_version_list.GetLBText(m_version_list.GetCurSel(), set_made_year);
GetDlgItemText(20017, set_product_num);
////////////////////////////////////////////////////////////////////////////////////////
//SN char 배열에 삽입
char model_code[2], factory_code[2], date[2], year[2], count1[2], count2[2];
CString set_made_date1, set_made_date2, set_made_date3;
CString set_product_num1, set_product_num2, set_product_num3, set_product_num4, set_product_num5;
//CString을 한자씩 짤라서 CString 한 글자씩으로 만든다.
//한글자씩 잘라서
set_made_date1 = set_made_date.Mid(0,1);
set_made_date2 = set_made_date.Mid(1,1);
set_made_date3 = set_made_date.Mid(2,1);
set_product_num1 = set_product_num.Mid(0,1);
set_product_num2 = set_product_num.Mid(1,1);
set_product_num3 = set_product_num.Mid(2,1);
set_product_num4 = set_product_num.Mid(3,1);
set_product_num5 = set_product_num.Mid(4,1);
//각 한자의 CString을 sctcpy로 복사한다.
strcpy(&model_code[0], (LPSTR)(LPCTSTR)set_product_code1);
strcpy(&model_code[1], (LPSTR)(LPCTSTR)set_product_code2);
strcpy(&factory_code[0], (LPSTR)(LPCTSTR)set_made_factory);
strcpy(&factory_code[1], (LPSTR)(LPCTSTR)set_made_date1);
strcpy(&date[0], (LPSTR)(LPCTSTR)set_made_date2);
strcpy(&date[1], (LPSTR)(LPCTSTR)set_made_date3);
strcpy(&year[0], (LPSTR)(LPCTSTR)set_made_year);//year의 경우에는 심지어 한자인데도 2개로 선언하고 처리함.
strcpy(&year[1], (LPSTR)(LPCTSTR)set_product_num1);
strcpy(&count1[0], (LPSTR)(LPCTSTR)set_product_num2);
strcpy(&count1[1], (LPSTR)(LPCTSTR)set_product_num3);
strcpy(&count2[0], (LPSTR)(LPCTSTR)set_product_num4);
strcpy(&count2[1], (LPSTR)(LPCTSTR)set_product_num5);
//한자씩 넣은 것을 또 char arry에 하나씩 넣는다.
//이때 변수명도 제각각 이라 순환문을 못 쓰고 다 따로 넣어줘야 해서 리팩토링이 절실하다.
send_packet[11] = model_code[0];
send_packet[12] = model_code[1];
send_packet[13] = factory_code[0];
send_packet[14] = factory_code[1];
send_packet[15] = date[0];
send_packet[16] = date[1];
send_packet[17] = year[0];
send_packet[18] = year[1];
send_packet[19] = count1[0];
send_packet[20] = count1[1];
send_packet[21] = count2[0];
send_packet[22] = count2[1];
<나의 코드>
//CString의 값을 하나로 붙인다.
g_postSerialnum = set_p_group1+ set_p_group2 + set_p_model1+set_p_model2 + set_made_date + set_made_year + set_product_num;
//한방에 복사 끝. 어차피 하나로 붙인 char 모음들을 묶어서 선언하고 복사한다.
//이때 반드시 strncpy를 쓴다.
strncpy(temp_sn, g_postSerialnum, 12);
//당연히 하나의 char array 이므로 순환문으로 넣는 것이 가능하다
for(int i = 11; i < 23; i++)
{
send_packet[i] = temp_sn[i - 11];
}
RECENT COMMENT