프로그래밍 25

[WinAPI] "const char *" 형식의 인수가 "LPCWSTR" 형식의 매개 변수와 호환되지 않습니다

유니코드 타입인 TCHAR형 문자열은 "" 쌍따옴표를 사용하여 문자열을 대입하거나 복사할 경우 오류가 생긴다따라서 TEXT(""), L"" 로 문자열을 TCHAR형에 맞게 변형시켜줘야 한다 //오류 lstrcpy(str, "WinAPI 양배추한닢"); //해결1 lstrcpy(str, TEXT("WinAPI 양배추한닢")); //해결2 lstrcpy(str, L"WinAPI 양배추한닢");

[C++] export와 클래스 템플릿, 헤더 파일 나누기

export와 클래스 템플릿템플릿들은 클래스와 멤버 함수 정의가 아니다 클래스와 멤버 함수 정의를 생성하는 방법을 컴파일러에게 알려 주는 지시문이다 템플릿들은 함수가 아니기 때문에 개별적으로 컴파일할 수 없다 따라서 특별한 구체화 요구들과 함께 결함하여 사용해야 한다 보통 모든 템플릿 관련 정보를 헤더 파일에 집어 넣고, 그 템플릿들을 사용하는 파일에 그 헤터 파일을 포함시키는 것이다 하지만 위와 같은 방법은 코드가 깔끔해보이지 않을 수 있다 템플릿이 아닌 클래스의 경우 cpp 파일을 따로 나누어 함수 정의를 구현한다 템플릿 클래스의 경우는 export 키워드를 이용하여 그것이 가능하다 ... export template class nameclass { ... }; ... 주의할 점은 export 키워드..

[C/C++] char[] 문자열 초기화시 주의할 점

문자열을 동적 메모리를 할당하여 초기화 할 때 주의해야할 점이 있다 char str = new char[1]; delete[] str; //new[]를 사용하여 초기화 시킨 //포인터 및 널 포인터와 호환 char words[15] = L"bad idea"; char *p1 = words; char *p2 = new char; char *p3; delete []p1; //결과를 알 수 없다, 사용하지 말자 delete []p2; //결과를 알 수 없다, 사용하지 말자 delete []p3; //결과를 알 수 없다, 사용하지 말자 new []를 사용하여 초기화한 포인터나 널 포인터가 delete []와 호환되기 때문에 주의할 필요가 있다 p1, p2, p3와 같은 경우에는 delete []와 호환되지 않기..

[C/C++] 난수 생성하기, rand(), srand()

난수 생성하기확률을 이용하는 프로그램을 작성할 때 난수를 생성할 필요가 있다난수란 정의된 범위 내에서 무작위로 추출된 수를 말한다 [출처: 위키백과]난수는 어떻게 생성할까?난수를 생성해주는 함수는 rand()라는 함수가 있다rand() 함수의 원형은 stdlib.h 또는 cstdlib (C++) 파일에 포함되어 있다 #include #include int main() { std::wcout

[C/C++] 한글 출력 오류, 유니코드, MBCS, 국제화

한글 출력 오류VS 2017을 이용하면서 학습하던 중에 갑자기 한글 출력이 이상하다... 컴파일러가 음절 사이사이에 공백이 생긴 상태로 출력한다 #include #include using namespace std; int main() { char ch1[20] = "안녕하세요."; char ch2[20]; string str1 = "양배추한닢입니다."; string str2; cout ch2; cout str2; cout wcscat() strchr() -> wcscmp() strcpy() -> wcscpy() strstr() -> wcsstr() strrev() -> _wcsrev() 유니코드 문자를 다루는 방법을 알았으니 코드를 수정해보자 하지만 이번엔 출력조차 하지 못한다 왜냐하면 아직 한가지 작업..

[C/C++] namespace 제대로 사용하기

외부 전역 변수를 사용하지 말고, 이름이 namespace에 있는 변수를 사용한다변수의 출처가 명확해진다 정적 전역 변수을 사용하지 말고, 이름이 무명 namespace에 있는 변수를 사용한다static int a; 보다는 namespace { int a; } 를 사용한다 함수 또는 클래스 라이브러리 개발하는 경우, 그들을 하나의 namespace에 넣는다실제로 C++ 표준 라이브러리 함수들은 std라는 namespace에 넣을 것을 요구한다 using 지시자 사용을 피한다 //using 지시자보다는 using namespace std; //using 선언이나 사용 범위 연결 연산자(::)를 사용한다 using std::wcout; using std::wcin; wcout

[C/C++] ios_base 클래스, setf, fmtflags 출력 형식 지정

출력 모양을 바꿔보자결과값을 출력할 때 프로그래머의 임의대로 출력하는 형식을 지정하고 싶을 때가 있다이럴 때 setf를 사용한다ios_base::setf(MSDN) :: https://msdn.microsoft.com/ko-kr/library/1kte43a2.aspxsetf는 ios_base 클래스의 일부로 출력 형식을 바꿔주는 명령어다setf(ios_base::fmtflags)의 형태로 사용하는데 괄호 안에 들어가는 fmtflgs가 출력 형식을 지정하는 상수값이다dec: 10진수 형식이 정수 값hex: 16진수 형식의 정수 값oct: 18진수 형식의 정수 값boolalpha: 숫자 값이 아닌 bool 형식의 개체fixed: 고정 소수점 형식의 부동 소수점 값showpoint: 생성된 부동 소수점 필드에..

[C/C++] atan2 함수로 각도 구하기 (극 좌표계)

직각 좌표계? 극 좌표계?평면 상에서 어떤 점의 위치 또는 원점에 대한 상대적 위치를 나타내야 한다고 할 때 우리는 좌표계를 이용한다그 좌표계를 표현하는 방법은 대표적으로 2가지가 있다첫번째로 원점으로부터의 수평 거리와 수직 거리를 이용하여 위치를 표현하는 직각 좌표계(rectangular coordinates)가 있다그리고 원점으로부터의 거리와 수평축으로부터의 각도를 이용하여 위치를 표현하는 극 좌표계(polar coordinates)가 있다 수평축으로부터의 각도 구하기직각 좌표계는 고등수학과정에서 많이 다루므로 극 좌표계를 프로그램으로 구현해보자어떤 한 점 A가 직각 좌표계에서 x, y로 표현된다고 가정한다원점으로부터의 거리는 피타고라스의 정리로 구할 수 있다그렇다면 수평축으로부터의 각도를 어떻게 구..

[C/C++] 포인터와 const

포인터에 const를 사용해?const라는 키워드는 포인터에 두 가지 방법으로 사용된다첫 번째 방법은 상수 객체를 지시하는 포인터를 만드는 것이다상수 객체를 지시하는 포인터를 사용하여 그 포인터가 지시하는 값을 변경할 수 없다두 번째 방법은 포인터 자신을 상수로 만드는 것이다상수 포인터를 사용하여 그 포인터가 지시하는 장소를 변경할 수 없다 상수 객체를 지시하는 포인터 int age = 39; const int *pt = &age; pt += 1; //pt는 const int를 지시하고 있으므로 사용할 수 없다 cin >> *pt; //사용할 수 없다 *pt = 20; //pt는 const int를 지시하고 있으므로 사용할 수 없다 age = 20; //age는 const로 선언되지 않았기 때문에 사용할..

728x90