묻고 답해요
164만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 C언어
4.9 그냥 첫번째 n1은 메모리 읽기의 문제가 아니라 그냥 형식 지정자를 일치 시키지 않아서 문제가 아닌가요?
4.9 강의 질문입니다.#include <stdio.h>int main() {float n1 = 3.14f; // 4bytes doublen2 = 1.234; int n3 = 1024;printf(”%d %d %d\n”, n1, n2, n3);}printf는 float를 double을 변환시킨다고 하셨는데. 만약에 float를 강제로 4byte를 가지게 하게 했을 때, 어떤 식으로 나오는 지 출력을 해봤습니다.그럼에도 불구하고 쓰레기값으로 나오더군요.그러면 그냥 첫번째 n1은 메모리 읽기의 문제가 아니라 그냥 형식 지정자를 일치 시키지 않아서 문제가 아닌가요?특히printf(”%lld %lld %d\n\n”, n1, n2, n3); 에서도메모리의 크기를 맞춰주어도 쓰레기 값을 출력해준 것을 보면..// 제 컴퓨터에서는printf("%f %d %d\n\n", n1 ,n2 ,n3) // O X X }가 O X O로 제대로 출력이 됩니다..파일명도 .c로 끝나는데..8분 강의에 제가 이해가 안되서 2시간을 쏟고 있어요.. 뭔가 머리가 아픕니다..
-
해결됨독하게 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으로 환경설정을 전부 변경해도 여전히 깨져 보입니다. 다른 해결방법이 있는지 궁금합니다. 감사합니다.
-
미해결
c++ 이상하게 저장되는 코드 질문있습니다
void put2byte(void *dest, uint16_t data){ *(uint16_t*)dest = data; } uint32_t num_data = hdr.get_num_data(); void* offset_array = hdr.get_offset_array(); //오프셋 어레이 받아오기 uint16_t now_data_region_off = hdr.get_data_region_off(); void* data_region = 0; uint16_t off = 0; uint16_t remain_data_region_off = now_data_region_off - input_record_size; put2byte((void*)((uint64_t)offset_array + num_data * 2), remain_data_region_off); 이렇게 되어있는데 remain_data_region_off 이 값이 37이하이면 37이하로 저장되는게 아니라 이상하게 저장이 되는데 무슨 문제인지 모르겠습니다 예를 들어 remain_data_region_off = 37 이면 7717이 저장되는데 num_data가 6일때만 발생합니다 0~5까지는 제가 설정한 값대로 저장이되는데 이유를 모르겠습니다
-
해결됨독하게 시작하는 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 프로그래밍
pszParam 수정이 왜 Hello World print에도 영향을 미치는지 이해가 잘 안됩니다.
섹션1 문자(배)열 상수는 어디에 저장되는가?에서 4분쯤에 나오는char* pszParam = "Hello World\n";printf(pszParam); printf("Hello World\n"); 여기서 pszParam을 디버거 메모리에서 수정시 아래 hello world가 왜 수정되는지 잘 이해가 되지 않습니다. 기본적으로 다른 메모리 공간에 저장 되어야 될꺼라고 생각되는데 컴파일러가 알아서 최적화 했다고 봐도 될까요? printf("Hello World\n"); 여기를 글자 한개만 더 넣어도 pszParam을 수정해도 아래 print 되는 문자열이 같이 수정되지는 않았습니다. 그리고 질문하면서 궁금해진 점이 printf("Hello World\n");이것만 있을 때 이 hello world! 가 쓰여진 주소를 알 수 있는 방법이 있을 까요?
-
미해결홍정모의 따라하며 배우는 C언어
flag
flag의 기능이 잘 이해가 되지 않습니다. 다른 건 다 이해가 되는데 flag가 true이고 false일 때 어떻게 달라지는지, 예를 들어 flag가 처음에 false로 설정이 됐으면 false인 상태가 유지가 되면 어떻고 true로 바뀌면 어떤지가 이해가 잘 안 됩니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
RangeSearch002 의 singlelist.c 파일 중 질문 있습니다.
강사님 안녕하십니까. 양질의 수업을 제공해주셔서 잘 듣고 있습니다. 다름아니고 질문이 있어서 여쭙고자 게시글 남깁니다.다름아니고 RangeSearch002 프로젝트 중 singlelist.c 파일의 SearchByAgeRange 함수에서 아래와 같은 코드에서 이해가 되지 않는 점이 있습니다. """void** pNodePtrList = malloc(sizeof(void*) * cnt);""" 본 질문의 목적은 아래와 같습니다.ㅇ malloc을 할 때 왜 따로 타입캐스팅을 하지 않았는가? 검색해서 찾아봤을 때 malloc은 타입캐스팅을 해도 되고 안 해도 되지만 제가 한다면 (void *)malloc 으로 썼을 거 같으며, 디버깅했을 때 결과도 동일한 결과물을 제공하는 것으로 확인했습니다.혹시 잘못된 점이 있으면 따끔한 지적 부탁드리겠습니다. 감사합니다. 좋은하루 되십시오.
-
미해결홍정모의 따라하며 배우는 C언어
포인터 초기화 질문
안녕하세요 질문 사항이 있습니다.포인터 변수를 초기화 할 때, 특정 주소값으로 초기화를 할 수도 있나요? 예시)보통의 경우 int *p = null이라고 한다면, int *p = 0x10000000 처럼 특정 주소로 초기화가 가능한가요? 그래서 printf("%d", &p);로 0x10000000번지의 값을 출력할 수가 있을까요?만약 없다면, 특정 주소에 담긴 값을 읽어오는 방법이 있을까요?
-
해결됨독하게 시작하는 C 프로그래밍
독하게 시작하는 C프로그래밍 교재
강사님 독하게 시작하는 C프로그래밍 교재 이번에 재개정 예정이라고 하셨는데 혹시 언제쯤 나올까요?
-
미해결홍정모의 따라하며 배우는 C언어
디버깅이 강사님 처럼 나오지가 않아요..
디버깅이 강사님처럼 깔끔하게 나오지가 않는데 어떻게 강사님처럼 인터페이스가 나오게 가능한가요? 비쥬얼 스튜디오 색말하는건 아니에요
-
미해결홍정모의 따라하며 배우는 C언어
출력이 이상한데 이유를 모르겠어요
제목 그래도 이유를 모르겠어요
-
미해결홍정모의 따라하며 배우는 C언어
코드
전 이렇게 코딩을 했는데 정상적으로 작동하지 않는데 뭐가 문제인 건가요?그리고 bool 타입을 쓴 이유와 작동원리가 이해가 잘 되지 않습니다.
-
해결됨독하게 시작하는 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되었다는 메세지가 뜨는데 이게 무슨 말인지 알 수 있을까요? 감사합니다
-
해결됨홍정모의 따라하며 배우는 C언어
코드 작동이 잘 안되요
코드를 똑 같이 쓴거 같은데 출력이 제대로 안되요. 인터넷에 물어보니까 sizeof를 써야하던데 왜 써야 하는지 저는 왜 안되는지 잘 모르겠어요
-
해결됨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 파일위치를 기준으로 경로 조정빌드도 해봤는데 안됩니다.대략 이 정도 입니다.원인이랑 해결방법이 궁금 합니다.