묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨독하게 시작하는 C 프로그래밍
비주얼 스튜디오 클래스 뷰 설정 관련
비주얼 스튜디오 클래스 뷰 설정에서 여러 프로젝트 항목들은 어떻게해야각종 예제들을 묶은 경우와 같이 리스트가 생성 되는지 궁금합니다.
-
미해결홍정모의 따라하며 배우는 C언어
scanf가 작동하는 방식 %d, %lf
scanf가 작동하는 방식이 %d가 들어있다면 정수를 받겠다고 판단을 해서 1.23456이 들어와도 1까지만 받아들이는 것이고 %lf인 경우에는 실수 형태를 받겠다고 판단을 해서 1.23456을 1.23456까지 다 받아들인다는 건가요?
-
미해결홍정모의 따라하며 배우는 C언어
포인터
int* ptr = arr;printf("%p %p", ptr, arr); 이럴 때 ptr은 arr주소로 가는 것이라 ptr의 주소는 따로 있다고 생각을 했거든요. 그래서 둘의 주소값이 다르다고 생각했는데 왜 같게 나오는 건가요..계속 이어서 수강했는데, 어디 강의로 가야 이에 대한 설명을 들을 수 있을까요, 아니면 여기서 설명해주시면 감사하겠습니다.
-
미해결홍정모의 따라하며 배우는 C언어
c언어에서 바이너리 표현
강의 3분08초를 보면c++같은 경우에는 바이너리 넘버(2진수표현법)를 코딩할 때 직접 사용할 수 있지만 c언어같은 경우 불가능하다고 하셨는데 숫자앞에 0b를 붙여서 표현가능하지 않나요?ex) 0b00000001이렇게 가능하지 않나요?제가 다르게 이해한 걸까요?감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
이중 포인터와 const
안녕하세요. 이중포인터에 const를 어느 위치에 붙이냐에 따라 고정되는 값에서 차이가 생기는데, 제가 그 차이를 제대로 이해한 것이 맞는지 몰라 질문드립니다.#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int x = 20; int* p1 = &x; const int* const * pp2 = &p1; const int** const pp2 = &p1; return 0; }이런 코드가 있다고 할 때,const int* const * pp2 = &p1; 코드에서 고정된 값은 pp2가 한 번 indirection 한 주소값, 즉 p1자체의 값과 x의 값이다.const int** const pp2 = &p1; 코드에서 고정된 값은 pp2 자체의 주소값과 x의 값이다. 이렇게 이해했는데, 맞을까요??늘 친절한 답변 감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
\t 간격 차이
#include <stdio.h> #include <stdlib.h> struct kid { char name[100]; int height; }; int compare(const void* first, const void* second) { if (((struct kid*)first)->height > ((struct kid*)second)->height) return 1; else if (((struct kid*)first)->height < ((struct kid*)second)->height) return -1; else return 0; } int main() { struct kid my_friends[] = { "Jack Jack", 40, "Geenie", 300, "Aladdin", 170, "Piona", 150 }; const int n = sizeof(my_friends) / sizeof(struct kid); qsort(my_friends, n, sizeof(struct kid), compare); for (int i = 0; i < n; i++) printf("%s \t%d\n", my_friends[i].name, my_friends[i].height); return 0; }위는 저의 코드입니다.강의 5분 45초를 보면 printf()함수에 \t를 통해서 간격을 조정해주는데 교수님의 경우 숫자가 같은 위치에서 시작하는데 저는 왜 40 혼자 멀리 떨어져있을까요? 또 \t를 검색해보면 Tab키와 같이 일정한 간격을 띄움라고 나와있는데 일정한 간격을 어디를 기준으로 띄우는 건가요?"Jack Jack"의 경우 공백 포함 9글자고"Geenie의 경우 6글자인데강의에서 "40", "300"은 같은 위치에서 시작함에 의문이 생깁니다.
-
미해결홍정모의 따라하며 배우는 C언어
디버그 >창>메모리가 안떠요
디버깅>일반에서 주소 수준 디버깅 사용을 선택했는데도 디버그 >창 > 메모리가 있어야 하는데 메모리가 안뜨는데 왜 이런 건가요?
-
미해결홍정모의 따라하며 배우는 C언어
9.15 쓰레기값 관련해서
제가 알기로 값을 따로 초기화 안할경우 무작위의 쓰레기값이 들어가는게 아니라, 그냥 16진수 cccccccc 가 들어가는걸로 알고 있습니다.
-
해결됨독하게 되새기는 C 프로그래밍
자료구조
연결리스트를 보면서 만든적은 있으나 머리속에서 참고자 없이 만든적은 없네요 구매는 했는데 자료구조 수업 듣고 와야겠네요. 혹시 수업이 따로 있을까요?
-
해결됨독하게 되새기는 C 프로그래밍
실습 중에 혹시 예외 발생하신 분들을 위해
Enter, Leave로 동기화 후 메인 쓰레드 루프 탈출을 위해q를 입력했을 때 간헐적으로 아래와 같은 에러가 발생하였습니다요거.. 선생님께 여쭤보려다가 문득 원인을 찾았습니다혹시 저와 같은 에러를 겪으신 분들을 위해 정리를 하자면 아래와 같습니다 메인 쓰레드 루프 탈출 까지는 정상적으로 수행됩니다다만, DeleteCriticalSection 함수 호출 후 return 코드를 호출하기 전 찰나의 순간에set 또는 reset 워커 쓰레드에서 EnterCriticalSection을 호출하여 예외가 발생합니다 즉, DeleteCriticalSection과 return의 코드 호출은원자적이지 않기 때문에 두 함수가 수행되는 중간에다른 워커 쓰레드에서 EnterCriticalSection 함수를 호출하는 경우인데요 이는, Delete돼서 존재하지 않는 임계영역에 Enter를 시도하기 때문입니다
-
미해결홍정모의 따라하며 배우는 C언어
11분 40초 프로그램에 저장
피피티에서 int i = 34567; 이 왜 10000111 | 00000111로 저장되는지 궁금합니다
-
미해결홍정모의 따라하며 배우는 C언어
visual studio code shell 설정
visual studio code 에서 Shell 검색을 하였을 때 다음과 같이 shell관련 항목이 나오지 않습니다.사전에 mingw도 설치하였고 path도 설정하였습니다. 해결 방법을 알고 싶습니다.
-
해결됨독하게 되새기는 C 프로그래밍
안녕하세요 선생님~ 몇 가지 여쭤볼 게 있습니다
항상 좋은 강의 감사합니다 ~!!두 가지 정도 여쭤볼 게 있습니다 실시간 감시 엔진File System과 Driver 사이 계층에 실시간 감시 엔진을 넣을 수 있는 공간이 있다고 하셨는데 그렇다면그런 엔진은 V3, 알약 같은 백신 프로그램에서 제공해주나요? 아니면 OS단에서 기본적으로 제공해주나요?만약 OS단에서 제공해준다면 감시 결과에 접근할 수 있는 인터페이스를 열어주고유저모드의 백신 프로그램이 그 인터페이스로 감시 결과를 가져오나요?삭제삭제 시 FAT에서 Delete 필드에 마킹되는 것은 이해하였습니다그런데 굳이 파일명의 첫 글자 까지도 다른 글자로 변경하는 이유는 무엇인가요?강의 잘 보고 있습니다 감사합니다 ~
-
미해결HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌
파일 생성이 되지 않습니다
강의 그대로 세팅 다 하고 난 후 강의처럼 OK버튼이 없어 오른쪽 상단의 GENERATE CODE를 눌렀습니다.이런 메세지 창이 뜨는데 어떻게 해야하나요??GENERATE CODE 버튼을 누르는게 아닌가요?
-
미해결홍정모의 따라하며 배우는 C언어
구조체의 복사에서 멤버가 문자열인경우
#include <stdio.h> #include <stdlib.h> struct data { int a; char str[20]; }; int main(void) { struct data data1 = { 1,"hello" }; struct data data2 = data1; printf("%s", data2.str); return 0; }강의 7:40를 보면 구조체 변수에 다른 구조체 변수를 대입하면 그 안의 값이 똑같이 복사가 가능한데,문자열도 복사가 가능한지 궁금해서 위처럼 실행시켜보니까 가능하네요. 이것은 마치data1.str = "hello";data2.str = data1.str;인 것 같은데.제가 알기론 문자열은 대입을 통해서 복사 하는 것이 불가능한 것으로 알고 있는 구조체에서는 가능한건가요?미흡한 질문 죄송합니다.
-
미해결HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌
파일이 없습니다.
소스 파일이 없어요
-
미해결HAL, CubeMX, TrueSTUDIO를 이용한 STM32F4 무료 강좌
사용 프로그램이 맞나요?
STM32f407ve를 검색했는데 아무것도 안떠요ㅠㅠㅠ
-
미해결홍정모의 따라하며 배우는 C언어
콘솔창에서 한글이 깨지는 이유
#include <stdio.h> #include <windows.h> int main(int argc, char* argv[]) { int ch; FILE* fr, * fw; //const UINT default_cp = GetConsoleOutputCP(); //printf("%u\n", default_cp); const char* in_filename = "원본.txt"; const char* out_filename = "사본.txt"; unsigned long count = 0; if ((fr = fopen(in_filename, "r")) == NULL) { printf("can't open %s\n", in_filename); exit(EXIT_FAILURE); } if ((fw = fopen(out_filename, "w")) == NULL) { printf("can't open %s\n", out_filename); exit(EXIT_FAILURE); } //SetConsoleOutputCP(CP_UTF8); while ((ch = fgetc(fr)) != EOF) { fputc(ch, stdout); fputc(ch, fw); count++; } fclose(fr); fclose(fw); //SetConsoleOutputCP(default_cp); printf("file %s has %lu characters\n", in_filename, count); printf("copied to %s\n", out_filename); printf("한글 출력 확인"); return 0; } 제가 제대로 이해한건지 헷갈리네요...강의 2:45 콘솔창에서 한글이 깨지는 이유는 텍스트 파일의 인코딩 방식은 UTF8(== 인코딩방식 == 코드페이지)인데 콘솔창의 인코딩 방식과 다르기 때문이 맞나요?원본.txt에 담겨있는 데이터는 컴퓨터 내부에서 바이너리로 저장되어있습니다. (프로그램을 통해 인코딩을 해도 이 바이너리 데이터 자체는 바뀌지않음)이 바이너리 데이터를 메모장은 UTF8 인코딩 방식을 통해서 인코딩 한 후 출력하기 때문에 메모장에서는 한글이 제대로 출력 되는 것이고,프로그램은 이 바이너리 데이터를 그대로 읽어왔지만 콘솔창의 인코딩 방식은 UTF8이 아니기 때문에 인코딩 과정에서 한글은 제대로 인코딩이 안되고 그렇기에 한글은 깨지는것. 그러므로 SetConsoleOutputCP(CP_UTF8);를 통해 콘솔창의 인코딩방식을 UTF8로 바꾸어 준 후 실행하면 한글이 제대로 출력 됨.마지막으로 복사한 사본.txt파일의 데이터는 원본.txt에 담겨있는 바이너리 데이터 그 자체를 그대로 복사한 것이고 그것을 메모장에서 열면 인코딩방식이 일치하기에 사본.txt파일은 한글이 깨지지 않는다.맞을까요? 감사합니다!!!
-
해결됨Windows 시스템 프로그래밍 - 기본
세마포어 예제 소스 코드 문의
안녕하세요 강사님세마포어 개념을 이해하려고 노력중입니다 ㅎㅎ강의 보며 소스코드를 따라치면서 이해해보도록 노력하고 있습니다.아래와 같이 실행하니, 보안에러가 발생하고 있습니다.혹시 제가 소스코드를 잘못작성한건지, 실행환경설정을 바꿔주면 실행되는지 문의 드립니다.#define CRTSECURE_NO_WARNINGS #include <iostream> #include <string.h> #include <Windows.h> #include <process.h> #include <conio.h> // Semaphore를 이용한 동기화 HANDLE g_hSema; TCHAR g_StringList[10][64] = { 0 }; UINT WINAPI ThreadSemaphore(LPVOID param) { int nIndex = (int)param; while (TRUE) { ::wsprintf(g_StringList[nIndex], TEXT("%d thred is Waiting"), nIndex); ::Sleep(500); DWORD dwResult = ::WaitForSingleObject(g_hSema, INFINITE); // g_hSema이 끝나기를 ::wsprintf(g_StringList[nIndex], TEXT("%d thred is Selected##"), nIndex); ::Sleep(500); ::ReleaseSemaphore(g_hSema, 1, NULL); } return 0; } int main(void) { g_hSema = ::CreateSemaphore(NULL, 3, 3, NULL); UINT nThreadId = 0; HANDLE hThread = NULL; // 핸들 생성 for (int i = 0; i < 10; i++) { hThread = (HANDLE)::_beginthreadex( NULL, 0, ThreadSemaphore, (LPVOID)i, 0, &nThreadId); } while (1) { system("cls"); for (int i = 0; i < 10; i++) { putws(gStringList[i]); } ::Sleep(1000); } return 0; } <에러 문구>
-
해결됨Windows 시스템 프로그래밍 - 기본
명시적 로딩 dll의 thread attach 관련 여쭤볼 부분이 있습니다
예시로 보여주신 부분 중에 명시적으로 main thread 에서 dll을 로딩하고 추가적인 thread를 생성했을 때 dllmain의 thread attach 이벤트가 호출되는데 얘기해주시는 설명에서는 thread 마다 dll을 명시적으로 로딩하고 프리해줘야 사용할 수 있다고 해주셔서요추가적으로 만든 thread에서 dll 명시적 로딩을 하지 않음에도 main thread에서 명시적 로딩한 dll의 dllmain의 thread attach 가 호출되는 부분이 궁금합니다 다른 thread에서 main thread 에서 명시적 로딩한 dll의 hmodule과 함수포인터를 얻어와 바로 사용해도 되는걸까요?강의 감사합니다!