묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 C언어
arr2d[2][4] 질문 있습니다
float arr2d[2][4]; 가 있을 때 arr2d의 사이즈 자체는 32바이트이지만 arr2d는 메모리공간은 없는 float 4개짜리 배열의 포인터잖아요.제가 잘못 배운 게 아니라면 뭔가 괴리감이 크게 느껴집니다. 그냥 받아들일까요?
-
미해결홍정모의 따라하며 배우는 C언어
13.1 파일 입출력의 작동원리 파일스트림
파일 스트림도 버퍼를 사용하는 스트림이라는 말씀이신가요?
-
미해결문제로 배우는 C언어
24. 최솟값 구하기
int main(){int i, min= 21470000, a;for(i=1; i<=7; i++){scanf("%d", &a);if (a < min)min = a;}printf("%d", min);return 0;}사용자가 입력 값을 5 3 7 11 2 15 17 와 같이 띄어쓰기가 포함된 입력 값을 입력하는데, 짜여진 코드에서는 띄어쓰기를 고려한 부분이 없는 것 같습니다.이 부분에서 궁금한 점이 있는데, scanf("%d ", &a) 와 같이 d 다음에 띄어쓰기를 포함하지 않고 스캔을 받더라도 OS가 자동으로 띄어쓰기를 고려하여 입력 값을 처리하는 이유가 무엇인가요??
-
해결됨홍정모의 따라하며 배우는 C언어
mingw-w64 설치 오류
아무리 여러 개를 시도해봐도 설치가 안됩니다ㅜㅜ mingw-w64 설치하는 해결방법이 있을까요? 현재 링크에 들어가면 강의에 나온 방법과 약간 달라진 것 같아요.
-
미해결C로 배우는 자료구조 및 여러가지 예제 실습
배열대신 포인터 arithmetic으로 써야하는 이유가 있을까요?
배열대신 포인터 arithmetic으로 써야하는 이유가 있을까요?
-
미해결홍정모의 따라하며 배우는 C언어
stdio.h를 include하지 않아도 printf가 실행되는 이유
main.c에서도, my_print_functions.h에서도stdio.h를 include하지않았는데왜 printf("Hello!!hi!!bye!!")가 출력되는걸까요??감사합니다.
-
해결됨Windows 시스템 프로그래밍 - 기본
파일 매핑 객체와 memcpy를 활용한 파일 복사 중, 왜 READ와 WRITE가 동시에 필요한가요?
안녕하십니까, 윈도우 시스템 프로그래밍 강의 듣고 있는 학생입니다. 메모리 맵 강의에서 소개해주신 숙제를 수행하던 중에 접근 모드를 설정하는 부분에 사소한 의문이 있어서 질문드립니다.작성한 코드의 흐름은 대략 다음과 같습니다.CreateFile()src파일과 dst파일의 핸들을 획득.GetFileSizeEx()src파일의 크기를 획득SetFilePointer()dst파일의 크기를 설정, 2번의 값을 활용CreateFileMapping()각 파일의 매핑 객체 생성MapViewOfFile()각 파일 매핑 객체에 대한 포인터를 획득memcpy()각 파일에 대한 매핑 객체의 포인터와 파일의 크기로 파일의 복사첫 시도에서 다음과 같이 1번과 4번을 수행했습니다.<실패>// 1번. dst 파일 생성 HANDLE hDst = CreateFile( TEXT("복사 대상 파일의 절대 경로"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );HANDLE hDstMap = CreateFileMapping(hDst, NULL, PAGE_WRITECOPY, 0, llFileSize.LowPart, NULL); if (hDstMap == NULL) { wprintf(L"Failed to create Dst file mapping obj [ERROR CODE: %d]\n", ::GetLastError()); CloseHandle(hSrcMap); CloseHandle(hSrc); CloseHandle(hDst); return 0; }수행 결과, Dst파일에 대한 맵뷰 객체를 생성하는데 실패했고, ERROR_ACCESS_DENIED에러 코드를 받았습니다.MSDN에서 CreateFileMapping()에 대해서 찾아본 결과, PAGE_WRITECOPY플래그가 PAGE_READONLY와 동일하다는 점을 확인하고 다음과 같이 수정하여 실행에 성공했습니다.<성공>HANDLE hDst = CreateFile( TEXT("복사 대상 파일의 절대 경로"), GENERIC_WRITE | GENERIC_READ, // 왜 GENERIC_WRITE만 설정하면 ERROR_ACCESS_DENIED인가요? 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL );HANDLE hDstMap = CreateFileMapping(hDst, NULL, PAGE_READWRITE, 0, llFileSize.LowPart, NULL); if (hDstMap == NULL) { wprintf(L"Failed to create Dst file mapping obj [ERROR CODE: %d]\n", ::GetLastError()); CloseHandle(hSrcMap); CloseHandle(hSrc); CloseHandle(hDst); return 0; }MSDN에서 문제를 해결했지만, dst 파일에는 복사한 내용을 써넣기만 하는데 왜 dst파일에 대한 READ가 필요한지 의문이 들어서 이에 질문드립니다. 긴 글 읽어주셔서 감사드립니다.
-
해결됨홍정모의 따라하며 배우는 C언어
9-8. factorial 예제
제가 factorial 예제를 제대로 이해했는지 몰라서 질문드립니다. #define CRTSECURE_NO_WARNINGS#include <stdio.h> long loop_factorial(int n);long recursive_factorial(int n); int main(){ int num = 5; printf("%d\n", loop_factorial(num)); printf("%d\n", recursive_factorial(num)); return 0;} // (1) 반복문 factoriallong loop_factorial(int n){ long ans; for (ans = 1; n > 1; n--) ans *= n; return ans;} // (2) 재귀 호출 factoriallong recursive_factorial(int n){ if (n > 0) return n * recursive_factorial(n - 1); else return 1;} 해당 예시 코드에서 (2)번 재귀 호출 factorial 예제 과정에 대해 설명해보겠습니다. (1)처음 n에 argument 5가 대입되면, 0보다 큰 조건을 충족하므로 5 * recursive_fatorial(4)가 반환됩니다.(2)이후 recursive_factorial(4)가 실행되고, 역시 0보다 큰 조건을 충족하므로 4 * recursive_factorial(3)이 반환됩니다.(3)이 과정 끝에 recursive_factorial(0)은 조건을 충족하지 못해 1을 반환합니다.(4)그렇게 마지막에 반환된 recursive_factorial(0)부터 다시 역순으로 값이 반환됩니다.(5)1(f(0)) >> 1 * 1(f(0)) >> 2 * 1(f(1)) >> 3 * 2(f(2)) > > 4 * 6(f(3)) >> 5 * 24(f(4)) >> 120(f(5)) 의 순으로 값이 반환되어 결국 main() 함수에서 recursive_factorial(5)의 값은 120이 출력됩니다.늘 친절한 답변 감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
4.9 질문 있습니다.
printf("%hhd %f", i, f); int i = 300; f=21.753241f라 했을 때 인자가 stack에 복사될 때 %f 부분은 왜 정상적으로 출력이 될까요? stack에 복사될 때 애초에 1바이트로 짤려서 복사가 되는 건가요?
-
해결됨독하게 되새기는 C 프로그래밍
ShellCodeSample03.c 질문 드립니다.
강사님 항상 강의 잘 보고 있습니다.질문이 있습니다.예제에서 기계어를 배열에 담고 그 배열의 주소로 점프하게끔 되어있는데 강의에서 말씀하셨지만 배열은 데이터 영역에 있는데 어떻게 실행이 되는건가요?무슨 기능을 끄면 가능하다고 하셨는데 이 예제엔 그 기능이 꺼져있는건가요?
-
미해결홍정모의 따라하며 배우는 C언어
9-7. 재귀 호출과 스택 각 변수 주소 값 크기 차이 질문
안녕하세요.선생님께서 강의 후반부에서 실제로 stack에 쌓이는 것은 변수 뿐만 아니라 함수를 실행하기 위해 필요한 데이터들도 있다고 말씀하셨습니다.이때 int 자료형 크기 이상(4 byte)의 차이를 보인다고 말씀하셨는데, 이 차이는 각 주소 값들을 비교한 것인가요?그게 맞다면 제 출력값 기준으로 각 주소값들은 256의(10진수 기준) 차이를 보이던데, 이것은 1byte정도의 크기가 아닌가요?늘 친절한 답변 감사합니다.
-
미해결[무료]정혜경 판타스틱 자료구조 입문 (in C)
동적할당 관련 질문드립니다!
안녕하세요 강사님, 혹시 해당 코드를 짤 때 검색함수나 삭제 함수에서 작업 노드로 사용되는 curp나 delp노드에는 동적할당으로 메모리를 할당하면 안되는 건가요? 자료구조 수업의 '단일 연결리스트' 내용 중 '검색 및 삭제 기능함수 구현 강의'에서의 질문입니다!
-
해결됨Windows 시스템 프로그래밍 - 기본
실행 중인 프로세스에 대한 질문
선생님 안녕하세요, 강의 재밌게 보고 있는 수강생 중 한명입니다"실행중인 프로세스 열거"를 듣고 있다가 하나의 궁금증이 생겨서 질문합니다. 영상을 이해한 바로는 시스템에서 실행중인 Process Handle 과 그 process가 사용한 메모리에 권한만 충족한다면 접근할 수 있다고 이해했습니다.그런데 여기서 제가 소유하지 않은 프로그램에 접근해서 메모리와 정보를 읽는 프로그램을 만들고 배포 유통 까지 하면 현행법상 문제가 발생하나요? 예를들어서, 어떤 회사가 A라는 프로그램을 만들었는데 그 프로그램을 모니터링하는 프로그램을 제가 출시한다면 거기에 따른 법적 제약이 있는지 선생님 경험의 바탕에서 궁금합니다. OS위에 돌아가는 process 간의 접근 제약이 그렇게 크지 않다는 것을 보고 갑자기 흥미로운 질문이 들어서 질문합니다 :D질문 봐주셔서 감사하고 강의의 주제에 다소 벗어나는 질문인 것 같지만 가볍게라도 답변해주셨으면 감사하겠습니다.
-
미해결홍정모의 따라하며 배우는 C언어
C언어로 메모장 프로젝트를 시작한다면,
지금 강의 커리큘럼을 완주했을때, 메모장 프로젝트가 가능할까요?제가 생각한 메모장 기능은파일 열기, 닫기,최대화 최소화, 크기변화 텍스트입력, 삭제. 복사,붙여넣기저장,수정-이렇게 일때, 해당 과정만으로 가능할까요?아니면 winAPI나 GUI에 대한 추가 학습이 필요할까요?순수C언어만으로 프로젝트가 가능한지, 다른 별도 학습이 필요한지 궁금합니다.
-
미해결홍정모의 따라하며 배우는 C언어
배열 매개변수 길이 관련 c++
17:30 분쯤C++ 에서 배열과 배열의 길이를 압축(간단히, 묶어서)해서 넘기는 방법이 있다고 하셨는데 그게 무엇인가요?
-
해결됨독하게 되새기는 C 프로그래밍
1강-문자(배)열 상수는 어디에 저장되는가? 관련 질문
5번째 줄에 있는 문자열과, 7번째 줄에 있는 문자열은, 같은 문자열입니다.(당연히 같은 메모리 공간에 존재)이 부분에서 궁금한 점이 생겨 질문을 하게 되었습니다. 다른 문자열로 일일이 메모리에 저장하지 않고, 굳이 같은 문자열로 저장하는 이유가 있을까요?(제 추측으로는 속도 향상을 위해서 같습니다. 하지만 개발자가 같은 메모리에 위치한다는 사실을 잘 인지하지 못한다면 오류도 빈번히 발생할 것 같은데 이유가 궁금합니다.) 같은 문자열이 아닌 다른 문자열로, 즉 다른 메모리 공간에 각각 존재시키고 싶다면, 어떻게 해야할까요? 1번에서 '개발자가 같은 메모리에 위치한다는 사실을 잘 인지하지 못한다면 오류도 빈번히 발생할 것 같은데' 라고 제가 추측했었습니다. 실제로 이러한 예시가 있는지 궁금합니다.
-
미해결홍정모의 따라하며 배우는 C언어
디버깅 창이 사라졌습니다.
왼쪽 하단에 Autos 창이랑, Call Stack 창이 사라졌습니다.. 혹시 어떻게 다시 살리나요?
-
미해결홍정모의 따라하며 배우는 C언어
강의 17:48 파일 이름을 scanf로 입력하기
강의 중 파일이름을 직접 코드에 치지않고 scanf를 사용 할 수 도 있다고 해서 scanf를 사용해보았는데 에러가 뜨네요. 방식이 틀린걸까요?#include <stdio.h> #include <stdlib.h> //exit() int main() { int c; char str[40]; FILE* file = NULL; char file_name[] = scanf("%s", str); file = fopen(file_name, "r"); if (file == NULL) { printf("Failed to open file.\n"); exit(1); } while ((c = getc(file)) != EOF) putchar(c); fclose(file); return 0; }감사합니다!!
-
해결됨홍정모의 따라하며 배우는 C언어
15.11 비트 필드 질문입니다.
안녕하세요.일단 저는 MacOS 환경에서 Visual Studio Code에 extention을 설치해서 듣고 있습니다.int main() { struct { bool option1 : 7; // bool : 0; // 자료형만큼의 크기가 더 할당됨. 패딩이 많이 들어가도 상관없으니 강제로 메모리를 더 달라. bool option2 : 1; // unsigned long long option3 : 16; } bbf; printf("%zu bytes\n", sizeof(bbf)); struct { unsigned int option1 : 32; // unsigned int : 0; unsigned int option2 : 1; // bool option3 : 1; } uibf; printf("%zu bytes\n", sizeof(uibf)); return 0; } 근데 예제를 따라하다가 bool option1 : 7;을 하니까 교수님과는 달리 제 환경에선 에러가 나더라고요...에러 메시지는 " error: width of bit-field 'option1' (7 bits) exceeds the width of its type (1 bit) " 였습니다.그래서 나름 찾아봤는데"In the C programming language, the width of a bit-field cannot exceed the width of the underlying type, and whether int bit-fields that are not explicitly signed or unsigned are signed or unsigned is implementation-defined. For example, int b:3; may have the range of values 0..7 or -4..3 in C, but only the latter choice is allowed in C++." (출처 : https://en.cppreference.com/w/cpp/language/bit_field )구글 번역을 참고해서 보니까 (영어를 잘하지 않아서 혹시 제가 잘못 이해한 부분이 있다면 알려주시면 감사하겠습니다.) 대충 비트필드의 넓이를 기본형식의 넓이가 초과할 수 없다는 것 같은데...unsigned int option1 : 32;는 되는데 unsigned int option1 : 33;하니까 비슷한 에러 " width of bit-field 'option1' (33 bits) exceeds the width of its type (32 bits) " 가 나오네요.int는 그렇다쳐도 bool의 크기는 1바이트니까 비트필드 안에서 7비트 선언하는게 왜 에러가 나오는지 혹시 알 수 있을까요? (구조체 안에 bool option1 : 1;로만 정의하면 또 괜찮아요..)
-
해결됨홍정모의 따라하며 배우는 C언어
7-12. switch와 case
안녕하세요. 궁금한 점 있어 질문드립니다.예제와 비슷한 코드를 구성해 질문하겠습니다.14행은 입력의 첫 글자를 제외한 나머지 글자들을 지워주는 코드로 이해했습니다.제가 이해한 바로는 프로그램을 실행한 뒤, 콘솔창에 hello를 입력하면,입력 버퍼에 'h', 'e', 'l', 'l', 'o', '\n'가 저장되고, 제일 먼저 'h'가 char c에 반환됨이후 putchar을 통해 c에 반환됐던 'h'가 출력됨나머지 입력 버퍼에 있던 글자들은 두 번째 while문 조건식을 충족하지 못해(\n 제외) 입력 버퍼에서 사라짐(escape sequence를 입력하기 전까지)새로운 입력 반복이렇게 이해했습니다.여기서 3번이 조금 헷갈립니다.첫 글자를 char c에 반환하고 putchar()로 실행한 뒤, 입력 버퍼에 있던 나머지 글자들은 두 번째 while문 안의 getchar()에 의해 한 글자씩 반복되며 입력 버퍼에서 사라지는 건가요? 그리고 첫 번째 while문은 char c로 값을 반환하는데, 두 번째 while문은 글자를 반환하는 변수가 없는 것 같습니다. 그렇다면 c에 반환된 첫 글자를 제외한, 입력 버퍼에 있던 글자들은 어딘가 반환되지 않고 그냥 사라지는 데이터들인가요? 최대한 제가 모르는 점을 정리했는데, 제대로 전달이 됐는지 모르겠네요 ㅜㅜ..늘 친절한 답변 감사합니다!