본문 바로가기

C++21

sizeof로 문자열 길이 구할 때 주의할 점 sizeof로 문자열 길이 구할 때 주의할 점. char szHello[] = "Hello, world!"; sizeof ( szHello ); 결과 : 14 char* pChar = szHello; sizeof ( pChar ); 결과 : 4 sizeof로 문자열 길이 구할 때 주의할 점. 출처 : https://learn.microsoft.com/ko-kr/cpp/cpp/sizeof-operator?view=msvc-170 2024. 2. 8.
strchr, strrchr CRT ( C 런타임 라이브러리 ) strchr 문자열 앞에서부터 검색 strrchr 문자열 뒤에서부터 검색 char *strchr( char * str, int c ); // C++ only const char *strchr( const char * str, int c ); // C++ only char *strchr( const char *str, int c ); // C only 매개변수 str : Null 종료 소스 문자열입니다. 매개변수 c : 찾을 문자입니다. 반환값 : str에서 첫 번째 c에 대한 포인터를 반환하거나, c를 찾을 수 없는 경우 NULL을 반환합니다. char *strrchr( char *str, int c ); // C++ only const char *strrchr( co.. 2024. 2. 8.
vs 조사식 관련 꿀팁 정리 visual studio 조사식 관련하여 보다가 꿀팁 발견 변수 my_var1를 디버깅중에 조사식에서 보고 있었으면 my_var1.c -> 단일 문자로 값 정보를 표시함. my_var1.na -> 포인터 메모리 주소 표시하지 않음. my_var1.nd -> 파생클래스 무시하고 기본 클래스 정보만 표시함. 이런 식으로 변수옆에 ".형식 지정자" 추가하면, 다양한 기능을 사용할 수 있다. 특히 na,nd가 유용해보인다. na는 변수의 값만 보고 싶을때, 메모리 주소를 지우면 더 디버깅할 때 편할 것 같다. nd 또한 내가 보고싶은 그 클래스의 정보만 보고싶을때 더 편할 것 같다. 다른 것들은 아래 참조 링크에 더 많다. 참조 : https://learn.microsoft.com/ko-kr/visualstud.. 2023. 2. 15.
memset 주의할 점 memet - CRT ( C 런타임 라이브러리) memset을 사용할 때 주의할 점 ( ZeroMemory함수도 비슷함 ) - std::string, std::wstring을 memset으로 초기화 하면 안된다. ( memset 이후, 문자열 삽입시, 정상작동 안되는 것 랜덤발생 확인) - 1Bytes 변수(char, unsigned char 등)를 제외한 변수를 초기화 할 때에는 0이외의 값으로 초기화를 절대 하지마라. - new, malloc 등을 이용하여 동적으로 배열을 생성하는 변수가 있는 struct, class에서는 초기화할 때 조심해라. - CString은 절대 memset으로 초기화를 하지마라. - virtual function을 가지고 있는 struct, class에서는 절대 memset.. 2023. 1. 31.
[C++/MFC] CString 문제? 출처 모음 댓: CString 처럼 MFC 클래스로 구성된 클래스 내부에는 공유하여 사용하는 데이터가 존재할 수 있어요. 그런데 멀티 쓰레드에서 이런 클래스들을 사용하다가 잘못해서 동시에 두개 이상의 쓰레드가 공유 데이터에 무언가를 하려고 하면 프로그램이 뻗어버릴 수 있어요 =ㅁ=... 그러니까 CString 쓰지마시고, char 배열 크게 잡아서 출처: 댓: CString은 내부적으로 static 문법을 사용하기 때문에 클래스 내부에서 공유되는 자원으로 인하여 멀티 스레드에서는 사용되지 못합니다. 그렇기 때문에 싱글 스레드 역시 메인 스레드와 다른 추가적인 스레드를 사용하는이기 때문에 사용하시면 안됩니다. CList나 CArray 등 해당 클래스에서 static 문법을 사용하는 지를 확인하셔야할 것 같습니다. 출.. 2021. 8. 13.
[c++11/c++14] constexpr 정리 참조 : http://egloos.zum.com/sweeper/v/3147813 2) 함수에서 사용 constexpr 함수는 인자가 constexpr에 부합한지에 따라, 컴파일 타임 또는 런타임에 실행되기에 범용적으로 사용되는 함수이고, 실행의 복잡도가 낮지 않다면, 가급적 constexpr 키워드를 붙이는 것도 괜찮은 습관이 되지 않을까 생각한다. 2017. 10. 30.
String literal 스트링 상수는 괄호가 끝나도 사라지지 않아요~ char* Func(){char* aPtr = "Hello";return aPtr;}void main(){cout 2017. 9. 18.
[비공개]string class 복사 시 참고하면 좋은 내용 출처 : http://soen.kr/lecture/ccpp/cpp4/36-2-2.htm 예제 : #include #include #include using namespace std; void main(){ string s("char array"); cout 2017. 9. 8.
strcpy strncpy 출처 : https://gpgstudy.com/forum/viewtopic.php?t=19342 strncpy()는 복사되었으면 하는 문자열의 길이를 넘어서지 않게 복사해 준다. 그리고 대상 버퍼를 넘어서게 되면 NULL로 끝나지 않는 문자열까지 복사하게 된다. 예를 들면 아래와 같다. strncpy(dest, 8, "1234567"); // dest == { '1', '2', '3', '4', '5', '6', '7', NULL } strncpy(dest, 8, "12345678"); // dest == { '1', '2', '3', '4', '5', '6', '7', '8' } strncpy_s() 는 대상 버퍼가 실제 수용가능한 크기와 복사되었으면 하는 문자열의 길이 두가지를 넘긴다. strncpy.. 2017. 7. 17.
strcpy_s 등 _s붙은 것들 특징, 문자열들 출처 : http://pccoms.tistory.com/entry/%EB%AC%B8%EC%9E%90%EC%97%B4-%EA%B4%80%EB%A6%AC-%ED%95%A8%EC%88%98%EB%93%A4-%EC%B4%9D%EC%A7%91%ED%95%A9 공통 _s 가 붙는 함수군에 대하여 - strDestination 버퍼를 넘어서는 메모리 복사를 방지하는 스트링 함수라 이해하면 되겠다. - _s류 함수의 첫 번째 인자로 배열이 들어가면 매크로에 의해 사이즈가 자동 계산된다. _s로 stcpy_s하더라도, 긴 string을 짧은 string으로 복사할 때, string이 잘리므로 뒤에 null이 없다. 생성된 짧은 string의 맨 뒤에 null을 넣어줘야 함. 2017. 7. 17.