월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
구조체 포인터의 포인터 연산에 관하여
포인터 연산과 관련하여 질문이 있습니다.int 는 ++연산을 하게되면 4byte씩 증가, char * 는 1byte씩 증가로 알고 있습니다.따라서, 아래의 int형 변수 2개가 담겨 있는 구조체의 크기는 8byte이며 구조체 포인터에 ++연산을 하게 되면, 8byte 씩 증가를 할 것이라고 생각을 하였으나, ++ptr2를 한번 수행하면 2byte증가, ++ptr2을 연속 2번 수행하면 10byte가 증가하게 되는데 그 이유는 무엇인가요?답변해주시면 감사하겠습니다.#include <stdio.h> int main() { typedef struct { int num1; int num2; } test; test s; s.num1 = 10; s.num2 = 20; void *ptr = &s; test *ptr2; ptr2 = &s; printf("size of struct s %lu\n", sizeof(s)); printf("ptr2 adderss and value %p %d\n", ptr2, *((int *)ptr2) ) ; ++ptr2; //++ptr2; printf("ptr2++ adderss and value %p %d\n", ptr2, *((int *)ptr2) ) ; printf("ptr address and value %p %d\n", ptr, *((int *)ptr)); ++ptr; ++ptr; ++ptr; ++ptr; printf("++ptr address and value %p %d\n", ptr, *((int *)ptr)); printf("ptr + 1 address %p\n", ++ptr); printf("ptr + 0x04 %p\n", ptr + 0x04); // int num = (int)(*(ptr + 4)); // printf("%d\n", *(ptr + 4)); }
- 해결됨홍정모의 따라하며 배우는 C언어
(21:15) sizeof( )와 배열의 크기 설명할 때, 괄호가 있는지 없는지 차이를 설명해주세요.
강의 21:15교수님께서 배열의 크기를 구해서 이것을 한 칸이 차지하는 크기만큼 나눠야한다고 설명하시는 부분에서sizeof의 괄호가 있는지 없는지는 앞에서 설명하셨다고 말씀하셨는데,, sizeof를 배운 강의 목차 내용을 다시 살펴봐도 잘 이해가 되질 않습니다.sizeof( )의 괄호가 있고 없고의 차이와 어떨땐 있고 어떨 땐 없는지 자세히 설명해주시면 감사하겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
디버깅을 하면 VS가 응답 없음이 되어버립니다
구글링을 통해 나온 방법들을 적용해 보았으나 상황이 변하지 않습니다 어떻게 해야 할까요?
- 미해결홍정모의 따라하며 배우는 C언어
[보충] 메모리를 OS에게 반납한다는 표현
강의 노트 작성이 안되어서 여기에 적습니다. 참고하세요.[보충]1. 제가 강의에서 메모리를 운영체제에게 반납한다라고 간단하게 말씀드리고 있는데 내부적으로는 조금 더 복잡하고 오해의 여지도 있어서 추가적으로 설명을 드리겠습니다.일단, 운영체제가 우리의 프로그램에게(보다 구체적으로는 process에게) 메모리를 줄 때는 가상 메모리(virtual memory)라는 개념을 사용합니다. 이때 우리의 컴퓨터에 꽂혀있는 실제 메모리 카드를 사용할지 아니면 (다른 프로그램이 메모리를 쓰고 있어서 실제 메모리 카드의 용량이 부족한 경우에) 하드디스크 같은 다른 저장공간을 사용할지는 OS와 연관된 문제가 됩니다. 우리 프로그램이 받은 메모리가 만약 실제 메모리 카드가 아니라 하드디스크를 가상 메모리로 받은 것이라면 아무래도 처리 속도가 느려지겠지요.C언어의 free()에 대해서 검색하다 보면 "메모리를 운영체제에게 반납하지 않는다"라는 얘기가 나옵니다. 제가 사용한 "운영체제에게 반납한다"라는 표현과 반대로 보이지만 사실은 같은 얘기입니다. 운영체제 입장에서는 당장 다른데 쓸 일이 없으면 "혹시 네가 다시 필요할 수도 있으니까 가상 메모리는 일단 가지고 있어"라는 라면서 그냥 둔다는 의미입니다. 그렇지만 실제 메모리는 운영체제가 다른 프로그램에게 쓰라고 줘버렸을 수도 있습니다.C에서는 free()한 메모리를 다시 사용하지 말라고 신신 당부를 하는데요, 만약에 정말로 프로그램이 실제 메모리를 계속 가지고 있는 거라면 주의하라고 할 이유가 없겠죠. 정리하겠습니다. 저는 여러분께 보다 쉽게 설명드리기 위해서 운영체제가 메모리를 다른데 쓸 수 있다는 의미에서 반납했다라고 말씀을 드렸고 그 의미를 조금 더 설명드렸습니다. 다른 프로그래머들과 의사소통을 하실 때에는 "메모리를 반납했다"라는 표현보다는 "메모리를 해제(deallocate)" 했다라는 표현을 더 많이 사용합니다.참고자료1. "Even if the pages are still remaining in the ownership of this process, but not being used, the actual RAM can be used by another process. So it's not a big deal if the pages haven't been released for some time."참고자료2. Learn C The Hard Way p 80, "you use free to return it to the OS so that it can be used by other programs."참고자료3. "the memory could have been returned to the operating system (a "page" of memory that you're no longer using can be removed from your address space, so there is no longer any memory available at that address - essentially an unused "hole" in your application's memory)." "This is why it is important to make sure you don't use a pointer after freeing the memory it points at."
- 미해결홍정모의 따라하며 배우는 C언어
while문 에러
while문 없을 때 는 scanf문이 문제 없이 잘 실행되었는데,while문이 있는 경우 status를 실행하고 나서 다음 실행문으로 넘어가지 않습니다.이유를 알 수 있을까요?
- 미해결홍정모의 따라하며 배우는 C언어
static 변수를 동적할당하면 free 해줘야 하나요?
static 변수는 프로그램 종료시에 할당해제 되므로 따라 free를 안해줘도 상관없지만 malloc 과 같이 메모리를 할당하여 사용하면 메모리 누수 방지를 위해 free를 해줘야 하는걸로 알고 있습니다. 여기서 궁금한 점이 static 변수를 동적할당하면 그건 free 를 해줘야 하나요??
- 미해결홍정모의 따라하며 배우는 C언어
vscode로 수업 들어도 괜찮을까요??
노트북이 m1맥북 하나여서 vscode로 수업 듣고있는데요.앞으로 쭉 수업 들으려면 윈도우에서 vs로 수업 듣는게 나을까요?vscode로 따라하면서 수업듣는데 무리 없을까요??회사에서 남는시간에 듣고있는데 노트북이 맥북밖에없네요ㅠㅠ프로그래밍은 이 강의로 처음 입문중인 쌩초보입니다!
- 미해결홍정모의 따라하며 배우는 C언어
(8.8 강의 전체)사용자 정의함수를 main함수에서 호출하지 않아도 사용할 수 있는건가요?
강의 전반에 걸쳐서 궁금한 부분입니다.강의에서 교수님께서는 사용자 정의함수로 get_choice(), get_first_char( ), get_integer( ), count( ) 함수를 정의하셨습니다.그런데 main함수에서는 오직 get_choice( ), count( )함수만 호출되어 사용되었습니다.※return값이 있든 없든 상관없이 호출하거나, 호출하지 않았습니다.사용자 정의함수는 무조건 main함수에 호출되어서 사용되어야한다고 알고 있었습니다. 왜냐하면 프로그램의 첫 시작은 OS이고, OS가 프로그램을 가동할 때 main함수부터 접근한다고 배웠습니다.혹시 제가 잘못 알고 있는 걸까요? 어떻게 사용자 정의함수는 main함수에서 호출되지 않아도 사용할 수 있는건지 잘 모르겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
(5:15) exit( ) 함수에 대해 추가적인 설명 부탁드립니다.
강의에서 교수님께서 작성한 코드를 보여주시며 exit(1);에 대해 설명해주셨습니다.그런데 exit( )함수는 처음 보는 함수였기에 잘 이해가 되질 않아 질문드립니다.헤더파일 <stdlib.h>를 include하여 사용하는 것까지는 알고있습니다. 다만 정확히 어떤 역할을 하길래,교수님께서 "프로그래밍이 완성된 후에는 이런 일이 발생하면 안된다. 디버깅이나 개발과정 중에 exit(1)로 인해 종종 문제가 발생할 수 있다. 프로그래밍을 해나갈 때 '여기는 정말 실행되면 안되는 코드다' 하는 것들을 exit(1)로 표기해두면 디버깅에 시간을 많이 아낄 수 있다"라고 하셨었는데... 정확히 어떤 말씀이신지 잘 이해가 되질 않습니다.exit( )함수는 어떤 역할을 하나요?그리고, 안에 들어간 숫자는 false 0, true의 1을 의미하는 것인가요? 이것들이 들어갔을 때 각각 어떤 동작을 하는지 실제 코드에 입력해봐도.. 잘 모르겠습니다.exit( )함수에 대해 추가적인 설명 부탁드립니다.
- 해결됨홍정모의 따라하며 배우는 C언어
0.10 17:00 경 8비트 정수의 범위에 대한 질문
안녕하세요, 강의를 잘보고 잘 이해하고 있다고 생각하고 진행하고 있습니다만, 의문점이 생겼습니다.8비트 정수의 범위를 설명해주실 때부호가 있는(signed) 정수일 경우 범위를 -128 ~ 127로표현해주셨는데요.분명 128의 숫자는 2진수로 표현하였을 때 1000 0000이 맞습니다.이걸 알려주신 '2의 보수' 표현법으로 -128을 나타내면1000 0000 -> 0111 1111 이 되고 +1을 하면1000 0000가 됩니다만 앞선 설명에서는 첫번째 비트공간을음수,양수를 판별하기 위해 사용되는 자리라고 설명해주셔서그렇게 생각하고 있었습니다만 이렇게 될 경우8비트 이니까 128의 2진수인 1000 0000에서 맨앞에 1이 부호를 표현하는 자리이기 때문에 짤리고 000 0000 으로 표현되는 것 이 아닌가요?그렇게 되면 "부호가 있는 정수"의 범위일 경우000 0000 ~ 111 1111(127)이 된다는 건데 뭔가 이상하고그렇다고 1000 0000 을 -0으로 치부해 버리면0을 '2의 보수' 계산법을 통해 계산하였을 경우 똑같이-0 이나 0이나 같은 0000 0000 값이 나와서 이상하고그냥 -128의 경우 +128이나 -128이나 2진수가 같기 때문에 이럴경우는 1000 0000 일때 000 0000 이여도 -128로 정해둔 것 인가요? 아니면 다른 이유가 있을까요?
- 해결됨홍정모의 따라하며 배우는 C언어
(2:48) a, b, q 입력은 모두 다 잘 받는데, c 입력만 정상적으로 받아들이지 못합니다.
int main(){ while (1) { char c; printf("Enter the letter of your choice: \n"); printf("a. avengers\tb. beep\n"); printf("c. count\tq. quit\n"); if ((c = getchar()) == 'a') printf("Avengers assemble!\n"); else if ((c = getchar()) == 'b') printf("\a"); else if ((c = getchar()) == 'c') { int num; printf("Enter an integer : "); scanf("%d", &num); for (int i = 1; i <= num; i++) printf("%d\n", i); } else { printf("\n"); break; } }1. a, b, q 모두 정상적으로 받아들여서, 의도했던 결과를 도출하는데, c만 정상적으로 받아들이지 않습니다. 2. 제가 처음에 char c; 선언 후, c = getchar( );이라고 입력해준 후, 각 조건문에서 getchar( )없이 c == 'b' 이런 식으로 c하고만 비교해주기도 했는데, →a 입력만 받아들이고 끝내버리는 문제가 있었습니다.1과 2 두가지 경우에서 발생한 문제의 원인이 무엇인지 잘 모르겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
(13:05) 콘솔 창에 숫자와 문자를 섞어 입력했는데, 정상적으로 받아들입니다.
교수님께서 진행하신 코드 그대로 잘 이해하며 작성해왔습니다. 콘솔창에 실행하려보니 완전한 숫자가 아닌, 숫자와 문자가 섞여있는 9094h를 입력했음에도 정상적으로 정수로 받아들이고, OK. Thank you.까지 출력하던데, 왜 그런 것일까요..?※a3432를 입력했을 때는 정상적으로 다시 숫자를 입력하라는 메세지를 출력했습니다.https://inflearn.com/questions/643353제 질문과 유사한 질문글을 참고하였음에도 아직 이해가 되질 않습니다. 왜 %ld가 숫자 뒤의 '문자'도 숫자로 인식하는건가요?숫자 뒤 문자는 char타입으로 받아들여 숫자라고 인식하는건가요?isdigit( )함수를 사용하라고 말씀하셨는데, %ld와 차이를 모르겠습니다.%ld는 (숫자가 포함되어있다는 가정 하에) char타입도 숫자로 인식하는게 아닐까 싶습니다. 그렇다면, a3432의 경우는 왜 정상적으로 인식하는지 모르겠습니다.. #define CRTSECURE_NO_WARNINGS#include <stdio.h>long get_long(void);int main(){printf("Please input a integer between 1 and 100.\n");long number = get_long();if (number > 1 && number < 100)printf("OK. Thank you.\n");elseprintf("Wrong input.\n"); return 0;}long get_long(void){printf("Please input an integer and press enter.\n");long input;char c;while (scanf("%ld", &input) != 1){printf("Your input - ");while ((c = getchar()) != '\n')putchar(c); //input left in bufferprintf(" - is not an integer. Please try again.\n");}printf("Your input %ld is an integer. Thank you.\n", input);}
- 미해결홍정모의 따라하며 배우는 C언어
(1:24) 제가 작성한 코드와 교수님께서 작성한 코드의 차이를 모르겠습니다.
아래 코드가 제가 작성한 코드입니다. 교수님께서 작성한 코드는 이렇습니다.그런데, 제가 작성한 코드는 정상적으로 출력되지 않습니다.무엇이 다른걸까요..?그리고 후에 함수 배울 때 설명해주시리라고 생각하지만, 지역변수와 전역변수의 개념을 모르겠습니다. 이 개념을 알고있어야 함수 구현할 때 제대로 알고 작성을 할 수 있을거라고 생각하는데, 어떤 차이가 있는지 알려주신다면 감사하겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
4.8 변화 지정자의 수식어들 (17분 17초 전후)
안녕하세요,printf("%hhd %hd %d", 257, 257, 257);여기서 콘솔창 결과가 1 257 257 로 나온 것에 대해 설명 중 1이 나온 이유에 대해 설명하신 내용이 정정되어야 하는 것 아닌지 해서 글 작성합니다.unsigned char 에서 가장 큰 값은 256이 아니고 255라서 257의 경우 오버플로우가 255 --> 0 (255+1) --> 1 (255+2) 로 발생해서 1로 표시되는 것으로 설명이 되어야 할 것 같은데 잘못 이해하였다면 말씀 부탁드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
(2:49) 코드의 진행 방식이 머릿속에서 꼬여버려서 while문을 추가하였을 때, 정상적으로 출력되는 이유를 모르겠습니다.
디버그를 해보았는데도 이해가 되질 않아 질문을 올립니다.둘 다 실행했을 때, y입력 후 엔터를 쳤다고 가정하고제 나름대로 작동 순서를 글로 작성해보았습니다.1번째 코드 (while문, continue 없음)이것이 처음 작성한 코드입니다.ex) y 입력 후 엔터"Current count is 0. Continue? (y/n)" 출력 후 입력 대기→ y 입력 후 엔터if문에서 입력한 문자 'y'와 n을 비교한다. [검사]n이 아니므로 빠져나오지 않고 count++ 실행"Current count is 1. Continue? (y/n)" 출력 후 입력 대기→ (버퍼에 있던 \n)if문에서 입력한 문자 \n과 n을 검사하여 통과 [검사]count++실행"Current count is 2. Continue? (y/n)" 출력 후 입력 대기2번째 코드 (while문, continue 추가)이것이 두번째 작성한 코드입니다.ex) y 입력 후 엔터"Current count is 0. Continue? (y/n)" 출력 후 입력 대기→ y 입력 후 엔터if문에서 입력한 문자 'y'와 n을 비교한다. [검사]n이 아니므로 반복문(while(1))을 빠져나오지 않는다.while(2)문에서 y 검사(참) → continue 실행 [무시]while(2)문에서 \n 검사(거짓) → 빠져나옴count++ 실행"Current count is 1. Continue? (y/n)" 출력 후 입력 대기if문에서 입력한 문자 '\n'과 n을 비교한다. [검사]if문을 빠져나와 while문의 조건(거짓)을 만족시키지 못한다.count++ 실행"Current count is 1. Continue? (y/n)" 출력 후 입력 대기------------------------------1. 2번째 코드에서 while(2)문과 continue;의 조합으로 작성한 코드가 어째서 '첫번째 글자를 제외한 나머지를 버퍼에서 싹 지워주기 위함'인지 잘 모르겠습니다.결과적으로 while문-continue는 첫번째 글자 포함, 그 이후 글자까지 무시한 후 \n은 false이므로 아무 작용을 하지 못하는 것이 아닌가 싶습니다.→결국 2번째 반복(cycle)에서 버퍼에 남아있는 \n을 if문에서 판단하고, 결국 1번째 코드와 동일하게 작동하는 것이 아닌가요?
- 해결됨홍정모의 따라하며 배우는 C언어
5:30 콘솔창 실행 후 입력 시, 디버그 에러가 나타납니다.
#define CRTSECURE_NO_WARNINGS#include <stdio.h>#include <float.h>int main(){ float num = 0.0f; float max = -FLT_MAX; float min = +FLT_MAX; float ave = 0.0f; int n = 0; float sum = 0.0f; scanf("%lf", &num); while ((scanf("%lf", &num) == 1)) { max = (num > max) ? num : max; min = (num < min) ? num : min; /*if (num > max) max = num; if (num < min) min = num;*/ sum += num; n += 1; } printf("min = %f, max = %f, ave = %f\n", min, max, sum / num); return 0;}를 입력했고, 빌드 실행 시 에러가 발견되지 않았습니다. 하지만 콘솔창에 입력했을 때, 디버그 에러가 나타났습니다.그렇다면 문법 문제는 아니라는 것인데... 무엇이 문제인지, 모르겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
헤더의 순서와 scanf()의 입력값 받는 문제 질문!
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int x = 0, y = 0; scanf("%d \n %d", &x, &y); return 0; } 안녕하세요!위의 코드에서 헤더의 순서를 바꿔서 기입하면 에러가 발생하는 이유는 무엇인가요?또한 scanf에서 한 줄 띄고 변수를 받아들일 때, 위와 같이 하지 않고아래와 같이 라고 하면scanf("%d \n", &x); scanf("%d \n", &y);제대로 입력이 받아들여 지지 않는 이유도 궁금합니다!ㅠㅜ
- 미해결홍정모의 따라하며 배우는 C언어
12분
printf("%+I %+I",123,-123)printf("%(빈칸) I % (빈칸)I",123,-123)여기서 빈칸을 띄워주면서 사용하면 플러스일때는 플러스이고 마이너스일때는 마이너스 를 표현해주신다고했는데 그러면 위에 I에다가 +를 붙힌거랑 다를게 없는거 아닌가요?
- 미해결홍정모의 따라하며 배우는 C언어
4.8 18분
printf("%d %lld %lld\n,INT_MAX+1,INT_MAX +1, 2147483648LL) 이라고 나오는데 왜 2147483648LL 뒤에 LL은 뭔가요??
- 미해결홍정모의 따라하며 배우는 C언어
scanf 밑줄이 계속 거슬려요!
#define _CRT_SECURE_NO_WARNINGS 를 달았는데도 scanf에 초록 밑줄이 그어지는 이유가 뭔가요?? 마우스를 갖다 대면 <반환 값이 무시되었습니다. 'scanf'> 라고 되어 있어요