묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨독하게 시작하는 C 프로그래밍
scanf_s 에 관해서 오류나옵니다.
#include <stdio.h> #include <stdlib.h> int main(void) { char szBuffer[4] = { 0 }; scanf_s("%4c", szBuffer, _countof(szBuffer)); printf("%c%c%c%c\n", szBuffer[0], szBuffer[1], szBuffer[2], szBuffer[3]); return 0; }위 코드를 똑같이 따라했는데 scanf_s 에 countof 크기 불일치 unsigned 가 나옵니다.환경 설정도 똑같이 했는데 강사님은 왜 오류가 안나고 저는 나는 걸까요?countof 가 매크로라고 하셨는데 그거랑 무슨 상관이 있는걸까요? 저와 강사님이 쓰는 _countof 함수는 같은거 아닌가요?
-
해결됨독하게 시작하는 C 프로그래밍
자문자답- 맞는지 틀린지 확인부탁드립니다.
강의 내용 중에 궁금한 점이 있어 질문드립니다.#include <stdio.h>int main(void){char szName[32] = { 0 };int nAge = 0;printf("나이를 입력하세요. : ");scanf_s("%d", &nAge);printf("이름을 입력하세요 : ");gets_s(szName, sizeof(szName));return 0;} 처음에는 szName과 nAge는 서로 다른 변수이므로 각각 다른 메모리 주소를 갖는다고 생각했습니다.그래서 scanf_s("%d", &nAge)를 호출하면 사용자가 입력한 값이 nAge의 메모리 주소에 저장되고, gets_s(szName, sizeof(szName))를 호출하면 입력한 값이 szName의 메모리 주소에 저장되므로, 두 변수는 서로 다른 메모리 공간을 사용하기 때문에 scanf_s()에서 입력받은 \n이 gets_s()에 영향을 주지 않을 것이라고 생각했습니다.하지만 실제로는 scanf_s()로 나이를 입력한 뒤 gets_s()가 별도의 입력을 받지 않고 바로 종료되었습니다. 강의에서 설명해 주신 내용처럼 scanf_s()가 남겨 놓은 \n을 gets_s()가 읽었기 때문이라고 이해했습니다.이 부분이 궁금해서 강의를 다시보며 아래와 같이 이해했는데, 제가 이해한 내용이 맞는지 확인 부탁드립니다.-szName과 nAge는 서로 다른 메모리 주소를 갖는다.-하지만 scanf_s(), gets_s()와 같은 입력 함수들은 각 변수의 메모리에서 직접 입력을 받는 것이 아니라, 공통으로 사용하는 stdin 입력 버퍼 에서 데이터를 읽는다. * 이 입력 버퍼는 szName, nAge와 같은 메모리 공간이 아닌 강의 중 강사님이 설명하신 추상화 File의 단 1개의 Buffered I/O로 이해했습니다.-즉, 키보드 입력은 먼저 stdin의 입력 버퍼에 저장되고, scanf_s()와 gets_s()는 이 동일한 입력 버퍼에서 필요한 만큼 데이터를 읽어 각각 nAge와 szName에 저장한다.-따라서 scanf_s("%d", &nAge)는 숫자만 읽고 \n은 입력 버퍼에 남겨 두며, 이후 gets_s()가 같은 입력 버퍼에서 남아 있던 \n을 읽어 바로 종료된다.제가 위와 같이 이해한 것이 맞는지 확인 부탁드립니다.
-
해결됨MFC Windows 프로그래밍 - 기본
안녕하세요 선생님
안녕하세요 선생님, 게임 업계에서 4년동안 C++을 개발하다가 직종 변경을 하려고 MFC를 듣고 있는 수강생입니다 이 MFC와 C++을 가지고 어떤 포트폴리오를 만들어야 이직이 가능할지 전혀 감이 안오고 있는데 어떤 프로그램을 만들어봐야 괜찮을까요?
-
해결됨독하게 시작하는 C 프로그래밍
리눅스로 진행해도 될까요?
안녕하세요. 강의를 듣는 도중에 윈도우기 실습환경인 점은 인지했는데, 혹시 개인적으로 리눅스로 진행해도 개념을 이해하는데에 어려움이 있을까요?
-
해결됨독하게 시작하는 C 프로그래밍
sizeof는 컴파일 타임 연산자라서 CPU를 사용치 않는다
라고 하셨는데, 챗지피티에게 물어보니 아니라고 합니다. 혹시 다른 관점에서 말씀하신 걸까요?
-
해결됨독하게 시작하는 C 프로그래밍
scanf("%d\n") 의미
강의를 여러번 봐도 이 부분에 대한 설명이 이해가 안되어서 되도록이면 자제했던 AI의 도움을 받았습니다.그 결과 알아낸 내용은 다음과 같습니다.scanf()에서 "%d\n" 의 의미는“모든 공백(스페이스, 탭, 개행)을 계속 건너뛰고,그 다음 ‘공백이 아닌 입력’이 나올 때까지 기다려라”입니다.그러니까 엔터를 치면 또 공백이 입력되니까 계속 대기상태가 되는 겁니다. 이 부분은 강사님 설명이 많이 부족했다고 생각합니다.여러 강의들을 보면서 느끼는 건데, 자부심이 상당하신듯 한데 그게 지나쳐 거만함이 자주 드러나는 것 같습니다. 또 이런 성향이 귀찮은듯 툭툭 내뱉는 말투로도 자주 표현이 되는 것 같고요. 수강자 입장에서 거슬리지만, 그런 성향이 불성실한 강의로 이어지지만 않으면 괜찮습니다.
-
해결됨독하게 시작하는 C 프로그래밍
주소 연산자(&) 간접 지정자(*) 반대 개념
안녕하세요.연산자 반대 개념이 헷갈려서 "크롬 AI 모드"랑 얘기해 보니까 아래와 같이 설명합니다.printf("%s\n", &*(szBuffer + 4));코드에서 주소 연산자(&)와 간접 지정자(* )가 서로 반대이기 때문에 "(szBuffer + 4)는 주소" 일 때예를 들어(szBuffer + 4) = "주소" -> "* 연산" -> *(szBuffer + 4) = "값" -> "& 연산" -> &*(szBuffer + 4) = "주소" == (szBuffer + 4);결과적으로(szBuffer + 4) = "주소" <- "& 연산" <- *(szBuffer + 4) = "값" 순서로 돌아왔기 때문에 (szBuffer + 4) == " 주소" 라고 하면 주소 연산자(&)와 간접 지정자(* )가 반대이기 때문에 "(szBuffer + 4)는 주소" 라고 이해하면 될까요?
-
해결됨독하게 시작하는 C 프로그래밍
Virtual Memory, Memory, Memory mapping tables
안녕하세요. 강의를 듣다가 궁금증이 생겨 문의합니다. 제가 공부했을경우에는 Memory, Virtual Memory, Memory Mapping Tables가 있어서 CPU가 특정 메모리 영역을 읽고 싶을때 VM과 Mapping Table을 활용해서 Memory에 올라온 값을 읽는 것으로 알고 있는데, 강의에서 설명하실때는 Mapping table에 관한 내용이 없어서요. 제가 공부할 때에는 Linux를 기반으로 공부를 하긴 했습니다만, 윈도우는 Mapping table을 사용하지 않는 걸까요...?
-
해결됨독하게 시작하는 C 프로그래밍
샘플코드 출력 오류 발생 질문드립니다
선생님 안녕하세요초보도 알기쉽게 강의해주셔서 감사합니다. 새프로젝트 파일을 만들어서 예제 코드를 작성해서 컴파일을 진행후 동작을 하면 제 콘솔창에는 이렇게 오류가 나는 상황인데 제가 놓치거나 잘못된 부분이 있는지 질문드립니다.
-
해결됨독하게 시작하는 C 프로그래밍
값의 교환에 사용되는 변수의 위치.
안녕하세요 강사님. 버블정렬을 구현하면서 의문점이 생겨 질문을 남김니다.저는 값의 교환에 사용되는 tmp변수의 선언을 반복문 외부, 즉 반복문보다 먼저 선언을 했고 그 이유는 매번 값을 교환할 때마다 변수를 선언하는것이 비효율적이라고 생각했습니다.질문1. 반복문 내부에서 변수를 매번 선언하는것이 정말 비효율적인가?질문2. tmp변수를 반복문보다 먼저 선언하고 활용하는 것이 정말 효율적인가? 잠재적인 리스크는 없는가?첨부자료로 제 소스코드 캡처본과 강의 타임라인을 남기겠습니다!13:41 ->오류 발견 및 반복문 내부 최종완성
-
해결됨독하게 시작하는 C 프로그래밍
메모리 비교에 관한 질문
20:10 쯤에 메모리 비교같은 경우는 비교연산자로 되지 않기 때문에 반드시 전용함수를 사용해야한다 라고 하셨는데, for루프를 돌면서 비교연산자를 사용해서 비교 가능하지 않나요?? 그리고 memcmp()이 내부적으로 == 를 사용하지않고 두 요소를 빼는 방법을 사용하는 이유가 궁금합니다.
-
해결됨독하게 시작하는 C 프로그래밍
문자열 Null
안녕하세요.만약 우리가 Console 에서 Love 라고 입력하고 엔터를 치면, Read File Buffer 에는 당연히 Null 이 있는게 아니라 L o v e \n 이렇게 5 바이트 가 저장되는건가요? 그렇지만 이게 RAM 으로 넘어가면서 NULL 이 생기는건가요 ? 수업시간에 문자열의 경우, NULL 이 있다고 말씀해주셨는데 잘 이해가 안가서 여쭤봅니다.
-
해결됨독하게 시작하는 C 프로그래밍
C, C++
안녕하세요. 이 강의는 C 와 C++ 둘다 상관없이 들어도 전혀 무방한가요? 아니면 조금이라도 주의해야하거나 사전에 알아두면 좋은게 있을까요 ?
-
해결됨독하게 시작하는 C 프로그래밍
문자열 입출력 코드 에러
gets_s() 에서 오류가 있다고 하는데 원인을 모르겠습니다.
-
해결됨독하게 C를 배운 사람을 위한 선형 자료구조
05_adtFileIO 개정이력에 대한 질문
안녕하세요. LinearDataStructure 프로젝트의 main함수 내용을 보니puts("2024-03-20\t전**님의 제보에 따른 05_adtFileIO 예제 버그 수정(v1.5)");puts("\t\t(사용자가 새로운 항목 추가 시 파일 저장위치 옵셋이 0으로 하드코딩된 오류)");라고 되어있길래 AddNewUser() 함수 정의를 살펴보니 아직 AddNewNode()함수 호출 시 offset이 0으로 하드코딩 되어있더라구요. 혹시 제공된 예제코드에 아직 반영이 되지 않은것일까요? 물론 이벤트루프가 종료되면서 SaveNewDataToFile함수에서 append모드로 파일이 열려서 파일의 맨 끝부터 정상적으로 추가되고, 다음에 다시 실행하면 MYNODE의 offset이 정상적으로 반영은 되더라구요. 그런데 새로 유저를 추가하고, 그 유저를 바로 검색해서 수정한뒤, commit을 한다고 하면, 그때 그 유저의 노드에 담겨져 있는 offset은 0이기 때문에, 가장 앞에 있는 노드의 데이터가 덮어씌워지는 것을 확인했습니다. (예제에서는 'Hoon') 전** 님의 Q&A에 답변하신 것 처럼 전역변수 이용해서 offset을 지정하면 이런 문제가 해결되지 않을까 싶습니다. 항상 좋은 강의 감사합니다. 선생님 강의 들으면서 매번 쾌감이 느껴집니다.
-
해결됨독하게 시작하는 C 프로그래밍
caller 가 메모리 할당 해제를 할 때의 문제점 질문
안녕하세요. 본 강의에서 Callee 가 동적 메모리 주소를 반환하고, Caller 가 나중에 그 동적 메모리를 free 를 통해 해제하는 구조에 문제가 있다고 하셨는데, 어떤 문제가 있는 것인지 구체적으로 잘 감이 잡히지 않습니다.멀티 스레딩과 연관지어 설명해주시면 감사하겠습니다.
-
해결됨독하게 시작하는 C 프로그래밍
단축키 맞는지 여부 문의드립니다.
*4분54초경 ALT+F7을 누르시라고 하셨습니다.-그런데 교수님처럼 실행되지 않았습니다.*그래서 이리저리 찾아보니-Alt+ENTER 를 누르면 나왔습니다. 환경은 저도 비쥬얼스튜디오2022 입니다. 단축키가 어떻게 되는지 혹시나 제가 잘못 아는 건지 싶어 한번더 문의올립니다.지도 부탁드리겠습니다. 감사합니다.
-
해결됨독하게 시작하는 C 프로그래밍
문자열을 사용하는 이중 포인터에 대하여 질문합니다
안녕하세요.char* astrList[3] = { "Hello", "World", "String" }; 이라고 선언했을 때는 각 정적 메모리 영역에 들어가는 문자열 상수의 시작 주소가 배열에 저장된다는 것은 알겠습니다. 그런데, char astrList[] = "Hello"; 라는 식으로 선언했을 때는 해당 문자열 상수가 아니라 그 복사본이 저장된다고 하셨는데, 그 원리가 정확히 무엇인지 궁금합니다.해당 강의에서 등장한, printf("%s\n", astrList[0] + 2); 혹은 printf("%c\n", astrList[0][3]) 등을 실무에서 주로 어떤 식으로 사용하게 되는지 간단하게라도 예시를 들어주시면 감사하겠습니다.
-
해결됨독하게 시작하는 C 프로그래밍
char 포인터 변수의 크기에 대하여 제가 이해한 것이 맞을까요
char 자료형을 가진 데이터는 항상 1byte 씩만을 차지하고, 그것을 가리키는 포인터는 64bit 체계 기준으로 항상 8byte 인 것으로 이해했습니다.그런데 동영상 2:40초부터 "1바이트라는 공간마다 64비트가 붙어 있는 게 아니다" 라고 말씀하셨는데, 위에 제가 이해한 내용이 틀리다는 의미일까요? 감사합니다.
-
해결됨독하게 시작하는 C 프로그래밍
용어 설명 필요
float이 단정도 double이 배정도 인걸 따로 찾아보고 알게되었습니다. 대체적으로 좋은 수업이긴 하나 수강자가 어느 정도 이해하고 있다고 가정하고 수업하는 경우가 종종 있는 것 같습니다. 참고하시면 좋을 것 같습니다.