묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
스택의 POP코드 질문드립니다.
안녕하세요 오랜만에 질문드립니다.현재 가정을 헤드노드->Test03->Test02->Test01->테일노드 이렇게 있다고 가정을 했을 때pPop->pNext->pPrev = g_TailNode.pPrev; 이 코드에서 질문있습니다.제가 이해한것을 풀어쓰느라 조금 길거 같습니다.흐름상 pop 구조체 포인터가 Test03노드를 가리키고 있고 헤드의 다음노드를 Test02로 바꾸는것까지 이해했습니다. 그다음 pop 다음 노드의 이전 노드 즉 Test02의 이전 노드가 테일 노드의 이전 노드를 가리킨다고 하는데 현재 흐름 상 보면 Test03의 다음노드의 이전노드가 Test01노드라고 하는걸로 해석이 됩니다. 제가 어느 부분에서 이해를 못한 건지 모르겠습니다.그리고 다음 코드를 이렇게 고쳐도 출력에는 이상이 없는 것으로 확인됩니다.
-
해결됨독하게 시작하는 C 프로그래밍
연령별 버스 요금 계산 문제에서 범위에 따른 결과 차이
저는 65세를 기준으로 제어문을 만들어 보았습니다。 다만 어린이 요금 부분에 (4<= age <= 13과(age <=13)사이에 결과값에 차이가 생기는데 왜 차이가 생기는지 궁금해요
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
adtFileIO 예제코드관련 질문 있습니다.
코드를 분석하다 드는 의문점이 있어 질문드립니다.실제 자료노드와 이를 추상화 한 MYNODE로 데이터베이스가 구축되어 있는데 여기에 MYNODE를 기준으로 파일 입출력을 연동시킨 것이 이번 예제의 핵심이라고 보입니다. 이렇게 한 이유가 파일의 일부를 메모리로 옮겨올 수 있기 때문(캐싱)이라고 하셨는데 이 캐싱의 정확한 개념이 궁금합니다. 해당 예제의 offset변수를 보면 파일의 처음부터 끝까지 모든 자료에 대하여 카운트정보를 담고 있는 것으로 보입니다. 즉 파일의 일부가 아닌 전부가 MYNODE기준 메모리상 데이터에 연동되고 이 후 선택노드의 추가 데이터만 메모리상데이터에 추가되는 것으로 보이는데 캐싱이라는 개념이 파일데이터들의 일부만 메모리에 옮기는 것이 아니라 일단 모든 목록(인덱스)를 올린 후 선택 노드의 데이터만 추가하는 개념인 것인지. 아니면 원래는 파일데이터의 목록까지도 일부만 올리는 개념인데 예제에서는 간략화하여 설명된 것인지 궁금합니다.SaveNewDataToFile()함수를 살펴보면 pTmp->bNew 불리언 변수가 true일 때 파일쓰기가 일어나는데 이는 기존 데이터가 존재하는 노드인 경우 데이터를 수정시 파일쓰기가 되지 않는 오류가 있지 않나 생각됩니다. 즉 commit이 노드데이터 수정 후 일어나지 않으면 프로그램 종료시 호출되는 SaveNewDataToFile()함수로는 수정데이터의 파일출력이 일어나지 않는 것 아닌가 하는 의문이 듭니다. 두 째 질문은 강의 중에 언급해 주신 부분을 확인했습니다. 감사합니다. 감사합니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
ADT강의 관련 질문 있습니다.
항상감사합니다.ADT강의 보고 코드 확인하는 중 질문이 생겨 글 올립니다. 1.동적바인딩과 다형성 등 사용성 증가를 위해 구체 자료를 가리키는 추상화 자료노드를 구성하여 함수로 그 추상화자료노드에 일차적으로 접근하는 개념이 ADT라고 파악되는 데 여기에 함수 포인터를 구조체 맴버로 포함시킨 이유가 궁금합니다. 그냥 구조체 외부에 선언된 getkey 함수를 사용해서 sorting을 해도 기능상 차이는 없을 것 같은데 포함시키신 이유는 객체지향개념을 적용하기 위함인지 아니면 구조체 안의 함수포인터 변수로 실현된 getkey 함수가 외부에 선언된 getkey함수를 사용할 때와 비교해서 실제 기능상 차이가 있는지 궁금합니다. 2.함수포인터는 함수를 가리키는 포인터 변수로 함수의 이름과 같으면 안되는 것으로 알고 있는데 이 예제의 경우 컴파일 되는 것은 구조체 안의 포인터 변수라서 그런 것인지. 궁금합니다. 3.강의에서 언급해 주신 구조체 안의 함수포인터 개념을 너무 흥미있게 들었습니다. 그렇다면 그 개념의 연장선이 객체지향 클래스 개념이라고 보는데 결국 c언어는 절차지향. c++은 객체지향으로 단편적으로 구분되는 것이 아니라 c언어 프로그래밍시 하나의 기능단위 캡슐화를 시도하는 프로그래밍 기법이 객체지향이 아닌지. 그리고 그것을 구현하기 쉽게 만든 것이 c++같은 객체지향 프로그래밍 언어가 아닌가 하는 궁금증이 생겼습니다. 이런 관점에서 보자면 함수포인터는 결국 c언어 안에서 이미 함수형프로그래밍의 개념으로 접근할 수 있는 수단이 아닌지 하는 생각도 듭니다. 이러한 접근이 맞는 것인지 여쭤봅니다. 4.getkey함수가 name 이나 phone을 반환하는데 호출함수이름이 SortListByKey()가 적절하지 않나 궁금합니다. 5.기타 질문으로 lineardatastructure.c 파일 안의 한글이 깨져 보이는 문제가 있는데 비쥬얼 스튜디오 및 윈도우에서 utf-8으로 환경설정을 전부 변경해도 여전히 깨져 보입니다. 다른 해결방법이 있는지 궁금합니다. 감사합니다.
-
해결됨MFC Windows 프로그래밍 - 기본
mfc 내부에서 콜백 함수 구현 방법
안녕하세요 현재 상황mfc를 이용해서 모든 창(window)의 이름을 전부 나열 해서 리스트 박스에 텍스트로 넣는 것을 구현 하려고 하는 중입니다.도중에 함수중EnumWindows(콜백함수, NULL)요 함수를 사용하려 했지만 콜백함수(인자)로 인해 사용이 안됩니다.win32를 통해 사용하여 위에 것은 다 구현했지만 mfc에서는 구현을 못한 상태 입니다. 이유는 위에와 같습니다....ㅠㅠ 구글 검색부터 이것저것 다해봤는데 도저히 방법이 안나와서 질문 합니다ㅜㅜ 궁금한점Enumwindows를 대체하는 함수가 존재합니까?mfc에서 콜백함수를 구현 하는 방법이 있습니까?Enumwindows를 구현할 방법이 있습니까?(콜백함수 빼고)
-
해결됨독하게 시작하는 C 프로그래밍
섹션14 최대값 실습문제
안녕하세요 교수님!개린이(개발자어린이) 실무자 입장에서오랜만에 잊고있던 C언어를 써야할 일이 생겨서강의를 신청했는데 너무 재미있고 유익합니다.완전 입문 보다는 더 심도깊고 폭넓게 알려주셔서 너무 좋습니다.저는 아래와 같이 코드를 작성해봤는데한번 봐주시면 감사하겠습니다. 1.int MaxValue(int a, int b, int c) { int max = a; if (max < b) max = b; if (max < c) max = c; return max;}int main(void){ int num1 = 0, num2 = 0, num3 = 0, finalValue = 0; printf("정수를 3개 입력하시오. "); scanf_s("%d%d%d", &num1, &num2, &num3); finalValue = MaxValue(num1, num2, num3); printf("최대값은 %d 입니다\n", finalValue); return 0;}
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
RangeSearch002 의 singlelist.c 파일 중 질문 있습니다.
강사님 안녕하십니까. 양질의 수업을 제공해주셔서 잘 듣고 있습니다. 다름아니고 질문이 있어서 여쭙고자 게시글 남깁니다.다름아니고 RangeSearch002 프로젝트 중 singlelist.c 파일의 SearchByAgeRange 함수에서 아래와 같은 코드에서 이해가 되지 않는 점이 있습니다. """void** pNodePtrList = malloc(sizeof(void*) * cnt);""" 본 질문의 목적은 아래와 같습니다.ㅇ malloc을 할 때 왜 따로 타입캐스팅을 하지 않았는가? 검색해서 찾아봤을 때 malloc은 타입캐스팅을 해도 되고 안 해도 되지만 제가 한다면 (void *)malloc 으로 썼을 거 같으며, 디버깅했을 때 결과도 동일한 결과물을 제공하는 것으로 확인했습니다.혹시 잘못된 점이 있으면 따끔한 지적 부탁드리겠습니다. 감사합니다. 좋은하루 되십시오.
-
해결됨독하게 시작하는 C 프로그래밍
독하게 시작하는 C프로그래밍 교재
강사님 독하게 시작하는 C프로그래밍 교재 이번에 재개정 예정이라고 하셨는데 혹시 언제쯤 나올까요?
-
해결됨독하게 시작하는 C 프로그래밍
섹션 13 다차원 배열 연습 문제
안녕하세요 강사님 섹션 13 다차원 배열 연습 문제 관련 질문있습니다해당 문제이고 예전 강사님께서 질문에 답변하셨던 내용을 보니 먼저 2중 for문 구조를 사용하지 말고 단일 for문을 두 번사용해서 각각 행과 열의 합의 게산 후 2중 for문 구조로 바꿔보라고 하셨는데 아래는 제가 2중 for문 구조로 작성한 코드이고 그 아래는 단일 for문을 사용해서 작성했는데 강사님께서 말씀하신 게 이 뜻이 맞을까요? 그리고 제가 생각하기에는 이중 for문이 더 간단한거 같은데 단일 for문을 사용해보라는 건 어떤 이유인지 알 수 있을까요?또한 제가 생각하기에 단일 FOR문을 사용하면 각 FOR문에 대한 합계를 구할때 변수 선언을 너무 많이했는데 혹시 이걸 줄일 수 있는 방법이 있을까요? https://www.inflearn.com/questions/1106529/%EC%84%B9%EC%85%98-13-%EB%8B%A4%EC%B0%A8%EC%9B%90-%EB%B0%B0%EC%97%B4-%ED%95%84%EC%88%98-%EC%8B%A4%EC%8A%B5%EB%AC%B8%EC%A0%9C 이중 FOR문 사용 단일 FOR문 사용
-
해결됨독하게 시작하는 C 프로그래밍
strcat(szPath + 17, sizeof(szPath) -17....)에서
뒤에 17을 빼는 이유가 이해가 안갑니다
-
해결됨독하게 시작하는 C 프로그래밍
디버깅에서 메모리창에서
예를 들어 문자열처리 강의중 예제에서 pszToken을 찾을때, pszToken을 치는경우랑 &pszToken을 치는경우가 다른데 정확히 어떤차이가 있나요? &pszToken는 주소를 찾는거같긴한데 둘의 차이가 헷갈립니다
-
해결됨독하게 시작하는 C 프로그래밍
배열 필수 실습문제
안녕하세요 강사님 다름이 아니라 필수 실습 문제를 풀다가 궁금한 점이 있어 질문드립니다. 다음 문제에서 저는 아래와 같이 코드를 작성했고 제 코드가 맞다고 생각했는데 #include <stdio.h>int main(void){ int nMin = 0; int aList[5] = {30, 40, 10, 50, 20}; for (int i = 0; i < 5; ++i) printf("%d ", aList[i]); putchar('\n'); for (int i = 0; i < 5; ++i) { if (aList[i] < aList[i + 1]) nMin = aList[i]; else nMin = aList[i + 1]; aList[i + 1] = aList[i]; aList[i] = nMin; } for (int i = 0; i <5; ++i) printf("%d\t", aList[i]); putchar('\n'); return 0;aList라는 변수가 Corrupted되었다는 메세지가 뜨는데 이게 무슨 말인지 알 수 있을까요? 감사합니다
-
해결됨Windows 시스템 프로그래밍 - 기본
강사님 파일입출력(Callback함수)와 관련하여 질문 드립니다.
강의 내용중 비동기 입출력 CALLBACK 함수 사용 부분에서 OVERLAPPED 구조체와 BUFFER 를 동적할당 해야 한다고 하셨는데.하지만 비동기 I/O를 하고 있는 스레드가 마지막 부분에서 SleepEx(1, TRUE) 로 대기하고 있습니다. 즉 스레드는 해당 CALL 함수 종료 후에도 계속 존재하기 때문에 스래드의 로컬변수로 선언해서 전달해도 CALLBACK 함수에서 사용하는데는 문제가 없는거 아닌지요? (이벤트로 처리하는 부분은 스레드 변수로 처리)왜 동적변수로 할당해야 하는지 이해가 되지 않아서요?실제로 제가 스레드내의 로컬 변수로 선언하고 동작 시켜도 정상적으로 동작을 해서요.
-
해결됨독하게 시작하는 C 프로그래밍
break와 중첩 Loop 예제
안녕하세요 강사님 break와 중첩 Loop 예제 문제 관련해서 질문이 있습니다아래 코드에서 a를 입력하면 i:0, a이 출력되고 i=1이 그 밑에 다시 한번 출력되는데 이것은 키보드로 a를 입력하고 enter 키를 입력할때 enter키도 입력으로 받아들여서 카운트가 하나 올라가서 그런 것 인가요?강의 시간때 말씀하신 개행문자 때문이라는게 이 뜻일까요?
-
해결됨Windows 시스템 프로그래밍 - 기본
dll 명시적 링크 오류 (원인 및 해결 방법이 필요 합니다)
DLL 명시적 링크에서 파일 오류가 생기는데 해결이 안됩니다.구글 검색이랑 여기저기 다 해봤는데 나오는 게 없어서 질문 합니다.일단 코드 입니다. 질문 내용은 코드 밑에 다가 적어 두겠습니다.DLL 파일 이름 = Dll1.dllmain 파일 이름 = dlltest.cpp경로는 강의와 동일 합니다. main() 파일#include <iostream>#include <Windows.h>#include <tchar.h>using namespace std;//void WINAPI DllTestFunction(int pParam);int main(){ HINSTANCE Hin = ::LoadLibraryA("..\\x64\\Debug\\Dll1.dll"); DWORD Error1 = ::GetLastError(); if (Hin == NULL) { printf("falied LOADLIBARARY"); } DWORD(WINAPI * dllfun)(void) = NULL; dllfun = (DWORD (WINAPI*)(void)) ::GetProcAddress(Hin, "DllFunction"); Error1 = ::GetLastError(); std::cout << Error1 << std::endl; dllfun(); if (dllfun == NULL) { std::cout<<"failed dllfun()"<<std::endl; wprintf(_T("falied dllfun()")); return 0; } std::cout << "ddd" << std::endl; FreeLibrary(Hin); return 0;} DLL 파일 #include "pch.h"#include<stdio.h>#include<Windows.h>#include<iostream>#include<tchar.h>#pragma onceextern "C" __declspec(dllexport) DWORD WINAPI DllFunction(void);DWORD WINAPI DllFunction(void);BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ){ switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE;}DWORD WINAPI DllFunction(void){ wprintf(_T("DLL TEST: DllTestFunction(param:)")); std::cout << "failed DLLfun dllfun()" << std::endl; return 0;} 현재 증상dllfun(GetProcAddress로 얻은 함수 주소)가 자꾸 NULL로 나와서 실행이 안됩니다. 현재까지 확인된 내용 Hin(LoadLibraryA) 모듈 핸들을 얻었는 데 NULL은 안 뜨나 디버깅을 했더니 This Program cannot be run in Dos mode 라고 나옵니다.dllfun(GetProcAddress로 얻은 함수 주소)은 NULL이 확실합니다. 밑에 코드 몇번 변경하면서 확인 됬습니다.GetLastError()을 dllfun()에 127(지정된 프로시저를 찾을 수 없습니다."라는 오류가 생성됩니다.)이 나옵니다 현재까지 시도경로 조정 절대경로, 상대 경로 다해봤습니다.함수 이름 변경extern "C" ~ 이것도 파일 양쪽에 다 넣어보고 한쪽에도 넣어보고 했습니다.구글 검색해도 원하는 내용이 안나옵니다.Hin의 자료 형을 HMODULE, HINSTANCE 다해봤습니다.환경변수 조정v3에 걸려서 꺼보고 실행exe 파일위치를 기준으로 경로 조정빌드도 해봤는데 안됩니다.대략 이 정도 입니다.원인이랑 해결방법이 궁금 합니다.
-
해결됨독하게 시작하는 C 프로그래밍
섹션 12[필수 실습 문제] '*' 출력 놀이 응용
안녕하세요 강사님 섹션 12 [필수 실습 문제] '*' 출력 놀이 응용 관련해서 질문이 있습니다 강사님께서는 if 문을 사용하셔서 문제를 해결하셨는데저는 for문만 사용했습니다수업시간에 강사님께서 말씀하신 puts("*")만 사용해서 연속으로 별을 찍는 것이 아니고 저만의 논리가 있으면 프로그래밍에서 방법은 상관없는 건가요? 특정한 정답이 있는건지 궁금합니다.
-
해결됨Windows 시스템 프로그래밍 - 기본
static 영역의 rw 가능한 곳은 어떤 데이터가 담기는지 궁금합니다.
안녕하세요! 프로세스 파트 마지막 강의를 듣다가 궁금한 점이 있어 질문 남겨봅니다!static 파트는 r 와 rw가 가능한 곳으로 나뉜다고 말씀해주셨고 보통 r만 가능한 영역은 문자열이 담기게 된다고 이해했습니다. rw 가 가능한 영역은 어떤 데이터기 담기는 지 알 수 있을끼요??
-
해결됨독하게 시작하는 C 프로그래밍
디버그로 인한 궁금증으로 질문드립니다.
안녕하세요 수업 잘 듣고 있습니다. c언어를 처음 배워서 모르는 것이 많아서 이상한 질문이라도 양해 부탁 드리겠습니다.c 부터 c++까지 4가지 강의를 쭉 들어보려고 구매를 했는데 열심히 해보겠습니다. 독하게 c 필수 실습 문제 2번째 것을 보며 디버그를 하다가 궁금증이 생겨서 질문 드립니다.제가 질문을 두서 없이 했습니다. 양해바랍니다ㅜ그리고 만일 질문의 내용이 수업을 따라가다 보면 알 수 있는 내용이라면 질문에 대한 답은 안 해주시고 그렇게만 써주시면 될 것 같습니다.첫 번째 char형 배열은 선생님 말씀처럼 잘 확인을 했는데두 번째 int형 변수는 저런 식으로 나와서 잘 모르겠습니다.메모리를 가리키는 주소 자체?도 메모리 인가요? 다만 위 사진에서는 주소 자체 메모리는 안보이고 그 주소가 가리키는 메모리만 보여줘서 주소 자체 메모리는 안 보일 뿐인가요?그렇게 되면 위 그림에서 0x00....43과 대응되는 ??은 못 쓰는 메모리가 되는 것인가요? 주소 자체?도 메모리라면 그곳에는 주소 뿐 아니라 정수도 저장할 수 있는 것 처럼 보이는데 맞나요? 주소 부분과 정수 부분이 구분 되어있는 건가요? 아니면 정수 부분도 주소로 쓰일 수 있는 건가요?위 사진에서 제가 67을 썼더니 주소가 0x00..43으로 나왔고 그것을 가리키는 메모리는 ??이 나왔습니다. 이것은 10진 수를 16진수로 바꾼 주소 자체에 그대로 매칭 시켜서 저장했다는 소리 같은데, 그러면 모든 정수는 이렇게 매칭 시켜서 중복되면 그 하나를 돌려 쓰게 되는 것인가요?뭔가 머리가 복잡해져서 그대로 질문을 했지만.... 말씀해주셔도 모를 것 같고 복잡할 것 같습니다.지금 단계에서는 그냥 넘어가고 뒤에 배우다 보면 다 알려주시는 부분인가요??아니면 따로 알아야 할까요??
-
해결됨독하게 시작하는 C 프로그래밍
강의에서 CON으로 콘솔을 여는게 참 신기한데요.CON의 경로는 어디일까요?
선생님께서 전강의에서 가르쳐주신 파일의 현재경로(프로젝트파일이 있는 폴더)로 con파일을 연거 같은데 그 폴더에는 con이 없네요 ㅠㅠ 요 파일은 별도로 관리되는 파일이라서 경로를 넣을 필요가 없는건가요?
-
해결됨독하게 시작하는 C 프로그래밍
섹션 12 반복문 필수 실습 문제 별 찍기
안녕하세요 강사님섹션 12 반복문 필수 실습 문제 별 찍기 관련해서 질문있습니다.변수 i=0; 초기화를 맨위나 while문 바로 위에 선언하면 실행이 잘되는데 변수 i=0; 초기화를 맨위나 while문 바로 위에 둘 다 선언하면 if 문까지만 실행이되고 그 아래 while문은 실행되지 않을까요? 그런데 또 맨위쪽과 while문 바로 위 모두 변수를 한번씩 선언하고 코드 실행 후 맨위나 while문 바로 위에 둘 다 선언했더니 정상적으로 작동이 됩니다 마지막으로 원래 return 0; 을 main함수 맨 밑에만 주로 썼는데 강사님께서 이 문제에서는 return 0;을 if 문 끝날때 쯤에도 한번 쓰셨는데 이유를 알 수 있을까요?솔직히 return 0;의 의미를 0의 값을 반환해서 최종적으로 함수를 실행되게 한다는 것 빼고 확실하게 모르겠습니다.