본문 바로가기

프로그래밍/C/C++

C/C++ 0xC0000005 오류 이유 - 메모리 관련 오류 코드를 작업하면서 가장 많이 보게 되는 오류가 아마도 0xC000000005 오류일 것입니다. 해당 관련 코드는 메모리를 잘못 사용하는 경우에 나는데요 위에 극단적인 코드를 예로 들어봤습니다. void main() { char *p = NULL; wsprintf(p, "%s", "1234"); printf("%s\n", p); } 할당 되지 않은 포인터 변수에 "1234" 값을 사용하려고 합니다. 당연히 오류가 나겠죠? 코드는 보시는거와 같이 0xC000000005 오류 코드로 나옵니다. 특히나 외부 메모리 사용하려고 할 때 가장 많이 발생합니다. 외부 메모리는 개발자 자신이 할당이 아닌 경우가 많다 보니 일반적인 경우 잘 사용하다가 어느 순간 외부 메모리는 해제되어 버리고... 개발자는 해당 메모리를 .. 더보기
C/C++ 파일 크기를 가져오기 파일 사이즈를 알아보기 위해서는 fseek 함수를 사용하면 됩니다. 특별한 인자는 없는듯 하죠? 그냥 넣어 주라는대로 넣어주면 됩니다. int GetFileSize(char *path) { int rst = 0; FILE *f = NULL; if (path == NULL) { return rst; } fopen_s(&f, path, "r"); if (f != NULL) { fseek(f, 0, SEEK_END); rst = ftell(f); fclose(f); } return rst; } 너무 심플하기에 코드만 볼까요?인자로는 파일 전체 경로만 받게 만들어 봤습니다.fopen_s 함수로 오픈 후 fseek 함수를 사용만 하면 끝 int len = 0; len = GetFileSize("C:\\Temp\\.. 더보기
C/C++ 인터넷 연결 체크하기 InternetCheckConnection 사용해보자~ 인터넷 연결을 확인하는 방법 중InternetCheckConnection 에 대하여 알아볼까 합니다. 첫번째 인자가 제일 중요한데 URL만 넣어주면 됩니다. 사용 방법 알아 볼까요? void main() { #include #include #include #pragma comment(lib, "WinInet.lib") void main() { if (InternetCheckConnection("http://www.daum.net", FLAG_ICC_FORCE_CONNECTION, NULL)) { printf("Ok\n"); } else { printf("Fail\n"); } } } 더보기
C/C++ 파일 및 디렉토리 존재하는지 확인해보기 간만에 MSDN 페이지를 봤는데 한글화가 너무 잘되어 있다..놀랬어요 =_=... 한글화가 너무 잘되어 있어서 이미지를 보는걸로만 하고사용방법만 알아볼게요 void main() { int rst = 0; _waccess_s(L"F:\\", 0); rst = _access_s("F:\\", 0); if (rst == 0) { printf("존재\n"); } else if(rst == -1){ printf("존재하지 않음\n"); } } 보기만해도 간단하네요 _waccess_s 같은 경우 유니코드_access_s 같은 경우는 멀티바이트 리턴값 존재하면 0 존재하지 않으면 -1 추가적으로access 함수를 vs2015에서 사용 시 에러가 납니다. 정확하게는 경고이지만 기본 설정이 경고도 오류로 포함하게 셋팅되.. 더보기
C/C++ 콘솔창 숨겨보자 feat GetConsoleWindow, ShowWindow 콘솔창 숨기는 방법은 GetConsoleWindow, ShowWindow 함수의 플래그 값을 SW_HIDE으로 주기만 하면 된다. void main() { HWND hConsole = GetConsoleWindow(); ShowWindow(hConsole , SW_HIDE); } MFC의 Dlg나 View 프로그램 또한 창의 핸들만 얻을 수 있다면 ShowWindow 함수를 이용하여 숨기거나 보이게 할 수 있으니 참고~ 더보기
RegOpenKeyEx 사용 팁 서비스 사용 시 Error 2가 발생할 경우! void main() { int rst = RegOpenKeyEx(HKEY_CLASSES_ROOT, "키경로", 0, KEY_READ, &key) } 특별히 문제가 되지 않는 코드인데요 이러한 코드가 서비스에서 실행할 시 RegOpenKeyEx의 리턴 값은 0x02가 떨어지게 됩니다. 인터넷 검색을 하다보면 권한 문제로 나오는데요 void main() { int rst = RegOpenKeyEx(HKEY_CLASSES_ROOT, "키경로", 0, KEY_WOW64_64KEY|KEY_READ, &key) } 대다수가 KEY_WOW64_64KEY 값만 넣어주면 된다고들 나오는데.. 이건 뭐 잘 모르겠네요.... 딱히 KEY_READ, KEY_WRITE만 넣으면 잘 동작했으니.. 심도있게 들어가기에는....ㅠ.. 더보기
C strlen 함수 사용 시 간단한 팁!! C에서 문자열 길이를 구할 때 strlen 함수를 많이 쓰죠? 사용법과 설명 보다는 이 함수를 사용할 때 주의할점을 알아볼까 합니다. void main() { char *p = NULL; printf("%d\n", strlen(p)); } 이와 같은 경우는 메모리 릭이 발생하죠?코드는 극단적으로 보여져서 쉽게 알아볼 수 있지만 실제 코딩을 할 때 메모리 동적 할당 및 해제 후 해당 변수를 사용해서메모리 릭이 발생할 수 있어요. 그래서 해당 함수를 사용할 때는 변수의 널 체크를 꼭 해주셔야 됩니다. void main() { char *p = NULL; if(p!=NULL) printf("%d\n", strlen(p)); } void main() { char p[10] = {0x01,0x02,0x03,0x0.. 더보기
[C] 숫자에서 문자열로 변환 프로그래밍을 하다보면 형변환을 가장 많이 한다. 나만 그런건가..!? 그 중에서 숫자에서 문자형으로 변환 하는 예제. 다른 방법도 있겠으나 sprintf 함수를 이용하여 변환하는 방법이다. sprintf 사용방법은 뭐 다른곳에서 설명이 더 잘 되어있으니 링크로 대체 간단하게 1번째 인자는 데이터를 담을 버퍼, 2번째 인자는 형변환 타입, 3번째는 2번째 데이터 값이 되겠다. https://msdn.microsoft.com/ko-kr/library/ybk95axf.aspx 더보기