묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 C언어
9.9 이진수 변환 recursion 질문건
질문 1)void print_binary(unsigned long n){ if (n > 0) { print_binary((n / 2)); printf("%d", n % 2); }} 이게 제가 작성한 코드입니다. 다름이 아니라 n이 0이 아니면 통과해서 recursion으로 함수 args에 5가 들어가고 그 다음엔 2.5가 들어가고 그 다음엔 1.0이 들어가고 그 다음엔 0.5값이니까 0이 들어가기에 튕깁니다. 그리고 다시 recursion 된 함수에서 돌아오는 과정을 거쳐야하는데 처음엔 5%2 이기에 1 이 출력 그 다음엔 2.5 %2 이기에 0이 출력그 다음엔 1 % 2 이기에 1이 출력 그 다음엔 0% 2 이기에 0이 출력 그리고 끝난다. 라고 생각이 드는데요.혹시 잘못 이해하고 있는게 있을까요? ******질문 2 ) 반면 강습자로부터 작성된 코드는 아래와 같습니다.void print_binary(unsigned long n){ int remainder = n % 2; if (n >= 2) print_binary(n / 2); printf("%d", remainder); return;} 이는 처음 remainder에 10 %2 = 0을 넣고 if 문에 의해 n이 2보다 크거나 같기에 통과 함수에 5를 args로 던지고 5 % 2 = 1 을 넣고if문 통과 후 2.5를 던짐2 % 2 = 0 을 넣고 1을 args로 던짐 1 % 2 = 1 이다. if문을 통과하지 못함그 다음부터의 과정은 recursion을 하느라 작동되지 못한 라인부터 작동되는 것인가요? 그리고 그럴떄 거꾸로 작동되는 이유가 마지막 함수 실행의 값부터 실행되기의 그런건가요?
-
미해결홍정모의 따라하며 배우는 C언어
6.13 초반 문제
로 코드를 작성했는데 337로 하여도 while문이 끝나지않아요 ㅠㅠ
-
해결됨홍정모의 따라하며 배우는 C언어
11분 16초경 질문
프로그램의 흐름이 쭉 가는데 분기가 생겼을 때if 문에서 return을 해준다면 조건을 만족시키지 않는 else에서도 return을 해줘야 한다고 하셨는데왜 그래야 하는 건가요?반환 자료형이 존재할 경우, 그러니까 보이드가 아닐 경우 함수를 호출했을 때 리턴값을 받아야하니 else에서도 return을 해줘야하는 것 인가요?
-
미해결홍정모의 따라하며 배우는 C언어
운영체제 구성 그림에서 입출력 장치의 위치
안녕하세요. "0.3.운영체제가 해주는 일들" 설명을 듣다가 의문점이 생겨서 질문 남깁니다. <그림1>위의 그림을 보면서 저는 사용자가 하드웨어 자원을 사용하기 위해서는 직접 하드웨어를 사용할 수 없기에, 응용 프로그램을 실행하고 응용 프로그램은 커널을 통해 하드웨어 자원을 사용하는 것이라고 이해했습니다. CPU, 메모리, 보조기억 장치는 직접 사용자와 상호작용을 할 수 없다는 것은 이해가 되지만(직접 손으로 조작하여 사용할 수 없기 때문), 입출력 장치는 사용자와 직접 상호작용 한다고 생각했습니다. 왜냐하면 직관적으로 생각을 해보면, 프로그램을 실행 할 때 "마우스로 응용프로그램을 클릭 or 키보드로 명령어 입력(입출력 장치 사용)-> 응용 프로그램 실행-> Kernel을 통한 하드웨어 사용(CPU, 메모리, 보조 기억장치)" 과 같은 과정이 일어나기 때문에, 입출력 장치는 사용자와 제일 먼저 상호작용 하는 것 아닌가? 라는 생각을 했습니다. <그림2>궁금증을 해결하기 위해 검색을 해보니, 다음과 같은 그림을 찾을 수 있었습니다. 위 그림을 보면 키보드 마우스 등등 입출력 장치는 사용자와 가장 먼저 상호작용을 하는 것처럼 나와있고 이는 직관적으로 이해가 됩니다. 요약해서 질문을 드리면 입출력 장치는 사용자와 가장 먼저 상호작용 하는 하드웨어임에도 불구하고 왜 <그림1>에서는 사용자와 가장 멀리 떨어진 부분에 위치하는 지 궁금합니다. 긴 글 읽어주셔서 감사드립니다.
-
미해결홍정모의 따라하며 배우는 C언어
*str 의 값
안녕하세요 교수님께서 10분 30초 쯤에 작성하시던 코드에서while (*str)이라고 작성하신 부분이 있는데요, 이 부분은 *str이 0이 아니면 while문을 진행시킵니다.또한 강의 중while (*str)와 while (*str != '\0')는 같은 역할은 한다고 말씀하신 바가 있습니다. str주소를 하나씩 옮겨가면서 읽을 값은 차례대로 1, 2, 3, 4, 5, \0 인데 \0과 0은 다릅니다.근데 어떻게 *str != 0로 처리돼서 while문이 진행된건지 궁금합니다.
-
해결됨홍정모의 따라하며 배우는 C언어
비주얼 스튜디오 2022를 사용중인데
13분 44초경에 new filter라는 항목이 있는데저는 그게 없고 new folder만 있어요그리고스샷 처럼 소스 파일 폴더도 헤더 파일 폴더도 없어여2022 버전이라서 그런건가여 아니면 제가 멀 잘못 한건가여?좋은 답변 항상 감사드립니당.
-
해결됨독하게 시작하는 C 프로그래밍
동적할당 관련 #inlude <malloc.h> 질문
안녕하십니까?독하게 시작하는 c프로그래밍 책 page 391 에 보면 _msize() 함수에 대한 설명이 있는데 예제 프로그램에서 #include <malloc.h>를 쓰셨는데 #include <stdlib.h>를 사용하지 않은 이유가 계신지 궁금합니다. 수고하십시오
-
해결됨독하게 되새기는 C 프로그래밍
왜 변수 주소 사이에 offset이 있는 건가요?
매개변수를 아래 처럼 선언하고void Add (int a, int b, int c)메모리 창에서 보면 중간에 빈 곳 없이 3개가 연속으로 채워져 있는데 32비트 환경에서 지역 변수로 int a = 1, b = 2; 이렇게 선언을 하면 중간에 cc cc 이런 값들이 채워져 있고 12바이트 만큼 서로 떨어져 있는데요 왜 이런 현상이 발생하는 건가요?중간에 cc로 채워진 부분은 딱히 사용하는 것 같지는 않은데 낭비가 되지는 않나요?
-
해결됨Windows 시스템 프로그래밍 - 기본
비동기 Callback방식 코드 질문
#include <iostream>#include <windows.h>#include <stdio.h>#include <tchar.h> void CALLBACK FileIoComplete( DWORD dwError, DWORD dwTransferred, LPOVERLAPPED pO1){ printf("FileIoComplete() Callback - [%d 바이트] 쓰기 완료 -%s\n", dwTransferred, (char*)pO1->hEvent); //hEvent 멤버를 포인터로 전용했으므로 가리키는 대상 메모리를 해제한다. //이 메모리는 IoThreadFunction() 함수에서 동적 할당된 것들이다! delete[](char*)pO1->hEvent; delete pO1; puts("FileIoComplete() - return \n");}DWORD WINAPI IoThreadFunction(LPVOID pParam) { //메모리를 할당하고 값을 채운다. //이 메모리는 완료 함수에서 해제한다. char* pszBuffer = new char[16]; memset(pszBuffer, 0, sizeof(char) * 16); strcpy_s(pszBuffer, sizeof(char) * 16, "Hello IOCP"); // Allocate and initialize the OVERLAPPED structure. //OVERLAPPED 구조체의 hEvent 멤버를 포인터 변수로 전용한다! LPOVERLAPPED pOverlapped = NULL; pOverlapped = new OVERLAPPED; memset(pOverlapped, NULL, sizeof(OVERLAPPED)); pOverlapped->Offset = 1024 * 1024; //일부러 사이즈 작게 했습니다. pOverlapped->hEvent = pszBuffer; //pOverlapped->hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); // Manual-reset event //비동기 쓰기를 시도한다. //쓰기가 완료되면 완료 함수가 역호출된다. puts("IoThreadFunction() - 중첩된 쓰기 시도"); ::WriteFileEx((HANDLE)pParam, pszBuffer, sizeof(char) * 16, pOverlapped, FileIoComplete); // 함수의 주소를 쓸 수 있다. for (; ::SleepEx(1, TRUE) != WAIT_IO_COMPLETION;); { //SleepEx를 호출한 WorkerThread가 ALERTABLE_WAIT 상태가 된다/ puts("IothreadFunction() - return "); } return 0; }int tmain(int argc, TCHAR* argv[]) { HANDLE hFile = ::CreateFile(_T("TestFile.txt"), GENERIC_READ, //쓰기 모드 0, //공유 하지 않음 NULL, CREATE_ALWAYS, //무조건 생성 FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, //중첩된 쓰기->비동기 쓰기 NULL); HANDLE hThread = NULL; DWORD dwThreadID = 0; hThread = ::CreateThread( NULL, 0, IoThreadFunction, hFile, 0, &dwThreadID); WaitForSingleObject(hThread, INFINITE);}강사님 위와 같이 코드를 작성해서 비동기 call back 방식으로 시도하려고 하는데, Hello IOCP가 쓰여지지 않고 종료도 되지 않는데, 뭔가 오류가 있는 부분이 있나요? 또, 자동으로 종료도 되었으면 하는데, 가능한가요? 어떻게 수정하면 좋을까요?혹시 예제 코드를 공유할 수 있다면 가능한가요? 감사합니다.
-
해결됨독하게 시작하는 C 프로그래밍
예제파일 불러오기
문자 입출력 강의처럼 클래스 뷰에 예제 파일들을 쭉 뜨게 하는 방법을 모르겠습니다..!!
-
미해결홍정모의 따라하며 배우는 C언어
printf("%s, %p, %c\n","We,"are,*"excellent programmers");
여기 부분에서 %p가 어떻게 작동하는지 정확히 이해가 안되네요..!
-
해결됨홍정모의 따라하며 배우는 C언어
5분 20초경 질문
영상에서 5분 20초경에 int는 4바이트인데 여기에 쌓인 것은 보니까 차이가 4가 나는 게 아니고 더 큰 숫자만큼 차이가 나고있죠라고 말씀을 하시는데쌓였다는 것이 n의 주소번호가 쌓인 거라고 말씀하시는 게 맞죠? 근데 이걸 왜 쌓였다고 표현하는지 이해가 안됩니다.스택을 쌓을 때 변수가 사용할 메모리가 쌓이게 된다고 했던 거 같은데 메모리가 아닌 메모리의 주소를 쌓인다고 표현하는 게 이해가 안됩니다.그리고 int는 4바이트인데 여기에 쌓인 것은 보니까 차이가 4가 나는 게 아니고 라고 말씀을 하시는데 int가 4바이트인 것과 주소번호의 숫자가 차이가 4가 날거라고 예상하는 것이 무슨 연관이 있는 건지 이해가 안됩니다.연관이 있으니 연관이 있는 것처럼 말씀을 하시는 거라 생각은 하는데 도통 이해가 안되네요.
-
해결됨홍정모의 따라하며 배우는 C언어
매개변수화 라는게 무슨 뜻 인가요?
5.12 함수의 인수와 매개변수 강의에도 언급이 돼있길래 봤는데 통 이해를 못하겠어요함수가 매개변수화 되었다? 매개변수는 함수 선언할 때 void function(void)에서 괄호안에 들어가는게 매개변수 아닌가요?저는 이 매개변수가 인자를 받아오는 그릇으로 이해를 하고 있는데 이게 매개변수화 되었다는 거랑 연결이 잘 안되네요
-
해결됨독하게 시작하는 C 프로그래밍
완강 후 실습 관련 질문
안녕하세요! 항상 좋은 강의 만들어 주셔서 감사합니다. 이번에 독하게 시작하는 C를 완강하고 자료구조를 듣는 중입니다. 그런데 C언어를 완강해도 능숙하게 다룰 수 있다는 느낌이 들지 않아서 C 코딩 예제를 플어보고 싶은데 혹시 추천해주실 만한 예제 사이트나 교재가 있으신가요?
-
미해결홍정모의 따라하며 배우는 C언어
Stolen 마지막부분 오류 질문입니다
아무리봐도 똑같이 따라쓴것 같지만 오류가 있다고 뜹니다 ㅠㅠ
-
해결됨홍정모의 따라하며 배우는 C언어
mingw-w64 폴더 설치 중 에러
2시간동안 꼼지락 거리다가 이상한 폴더에 mingw-w64가 숨어있는 것을 발견하였습니다!왜인지는 모르겠으나 과거에 C언어 코딩 독학용으로 깔았던 Dev-Cpp(데브씨플플) 폴더 안에 MinGW64라는 이름으로 있는 것 아니겠어요?!그리고 열어본 결과 존재 합디다...그래서 신나서 글을 쓰던 도중 '어? 이거 지우고 다시 깔면 에러가 안 뜨지 않을까?' 해서 지워봤습니다안 되더라구요...다시 방황하던 중 msys2를 설치하라는 답변글을 보고 설치했었던 msys2 폴더에서 자포자기한 심정으로 gcc.exe를 검색해 봤습니다그런데 요녀석이 ucrt64\bin 안에도 숨어있더라구요!그래서 이번에는 실험 그딴거 안하고 바로 연결했습니다
-
해결됨독하게 시작하는 C 프로그래밍
개정판 출판 계획
안녕하세요.개발자는 아니지만 업무 능력 고도화를 위해 강의를 수강하고 있는 직장인입니다. 독하게 시작하는 C프로그래밍 2015년판이 절판되었고, 강의 소개에 최신 개정판을 위한 강의라고 돼 있는데혹시 최신 개정판 출판 계획과 예상 일자가 있는 것인가요?
-
해결됨독하게 시작하는 C 프로그래밍
섹션 14. 사용자 함수 필수 실습 문제
안녕하세요! 여기서 세 정수를 입력받는 함수를 사용자 함수로 만드는 과정에서 어려움이 있습니다.. 입력받는 함수는 main에 넣으면 쉬운데 이렇게 3개 정수를 넣으려니 계속 막혀요ㅠㅠ
-
미해결홍정모의 따라하며 배우는 C언어
3.12 강의 수학적으로 존재하지 않는 식을 강행했을 때
안녕하세요. 비주얼 스튜디오에서 선생님과 똑같이 asinf() 코드를 작성하고 실행을 했는데 선생님 화면에서 나온1.570796-nan(ind)대신에8096.0000008096.000000이렇게 나옵니다. 뭐가 잘못된걸까요?
-
해결됨홍정모의 따라하며 배우는 C언어
11.2강 19:43 질문이 있습니다.
공부한 내용을 테스트해보려고 다음 코드를 작성했습니다.#include <stdio.h> #include <stdlib.h> int var_global_initialized = 1; int var_global_uninitialized; void func_test(); int main(void) { // 값이 저장되는 메모리 영역과 그 주소 // Code 영역 printf("%llu [Code]\n", (unsigned long long)"I am a String."); // Data 영역 printf("%llu [Data]\n", (unsigned long long)&var_global_initialized); // BSS 영역 printf("%llu [BSS]\n", (unsigned long long)&var_global_uninitialized); // Heap 영역 char* var_dynamic = (char*)malloc(sizeof(char) * 100); printf("%llu [Heap]\n", (unsigned long long)var_dynamic); // Stack 영역 func_test(); return 0; } void func_test() { int var_local = 0; printf("%llu [Stack]\n", (unsigned long long)&var_local); }; 메모리 영역 별 간격이 너무 작게 출력되는데 올바르게 작성한게 맞을까요..?? 참조온라인 컴파일러 링크문자열 리터럴이 저장되는 메모리 영역 링크메모리 영역별 예제 코드 링크