월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨홍정모의 따라하며 배우는 C언어
13.7강 0:53 fputs 함수 질문이 있습니다.
fputs 함수의 함수 원형에서 첫 번째 인수가 char* 형태인데 char 형태의 ch를 인수로 입력해서 그런지 아래 오류가 발생하면서 실행이 안되는 것 같습니다.'function': 'const char *' differs in levels of indirection from 'int' 혹시 다른 설정을 해야 하는 걸까요..??
- 해결됨홍정모의 따라하며 배우는 C언어
14분 41초경 질문
int arr[2][3] = { {1, 2, 3}, {4, 5, 6} }; int* parr[2]; parr[0] = arr[0]; parr[1] = arr[1]; printf("%p\n", &parr[0]); printf("%p\n", parr[0]); printf("%p\n", arr); printf("%p\n", &arr[0]); printf("%p\n", arr[0]); printf("%p\n", &arr[0][0]);이 예제를 제가 설명해보면&parr[0]은 parr[0]이라는 포인터의 주소이다.parr[0]은 arr[0][0]을 가리키는 포인터이다.arr은 arr[0]을 가리킨다.&arr[0]에서 배열의 이름은 주소이기 때문에 &를 붙이던 안 붙이던 똑같다. 따라서 arr[0]과 같다.arr[0]은 arr[0][0]을 가리킨다. 따라서 &arr[0]도 arr[0][0]을 가리킨다.그래서 출력을 하면 arr과 &parr[0]을 제외한 나머지는 전부 &parr[0][0]을 출력해야 하는 것 같은데실행 결과를 보면 arr도 &arr[0][0]을 출력하고 있어요.제가 잘못 이해한 게 맞을텐데 뭐가 잘못된 건지 모르겠어요 도와주세요질문이 너무 많아서 죄송합니다 제가 질문 게시판을 어지럽히는 것 같네요 ㄷㄷ
- 미해결홍정모의 따라하며 배우는 C언어
9분 20초경 질문
*(parr[j] + i)과 *(*(parr + j) + i))는 어느정도 이해를 했습니다.예를 들면*(parr[0] + 1)parr[0]에 담긴 데이터는 주소이고 그 주소는 arr0이라는 포인터와 비슷한 무언가를 가리킨다.그리고 arr0이라는 포인터와 비슷한 무언가는 arr0[0]의 주소를 가리킨다.그리고 arr0[0]은 arr0의 첫 번째 공간을 의미한다.그러므로 parr[0]은 arr0[0]을 가리키는 것이고 parr[0]에 1을 더하면 arr0[0]의 다음 공간인 arr0[1]을 가리키게 되고*로 그 공간에 접근하게 된다.*(*(parr + 1) + 1)parr은 arr0을 가리킨다. 그리고 arr0은 arr0[0]을 가리킨다.그러므로 parr에 1을 더하면 arr0[1]을 가리키게 된다.거기에 *를 붙이면 arr0[1]의 공간에 있는 데이터에 접근을 한다.거기서 1을 더하면 그 데이터에 1을 더하게 되는 것이다.이렇게 이해를 했는데 맞는거겠죠?이거 말고 질문이 있는데parr[j][i]와 (*(parr + 1))[1]의 맨앞에 *가 없는데도 어떻게 그 공간에 접근해서printf 함수로 출력을 했을 때 배열의 주소가 아닌 배열의 데이터가 출력 될 수 있는 건지 궁금합니다.parr[j]는 배열의 주소가 나오는데 parr[j][i]는 왜 배열의 값이 나오는지 이해가 안되요.감사합니다
- 해결됨홍정모의 따라하며 배우는 C언어
int* 변수명과 int *변수명의 차이
int* 변수명과 int *변수명이 해석하는데 차이가 있다고 했는데이게 해석상으로 어떤 차이가 있는 건지 궁금합니다.전 강의에서 어떻게 얘기를 해주신 거 같은데 그 때도 이해를 제대로 못했어요
- 미해결홍정모의 따라하며 배우는 C언어
vsc반드시깔아야하나요
자꾸 오류나고 교수님이 하시는건 제것엔 안되고 답답하기만 한데 걍 visual studio만 써도 되죠?
- 미해결홍정모의 따라하며 배우는 C언어
free의 의미?
안녕하세요19분 30초 쯤에 동적할당으로 할당받은 메모리를 free를 통해 반납하는 내용인데요 printf("Before free %p\n", ptr); free(ptr); // no action occurs when ptr is NULL printf("After free %p\n", ptr);위 코드를 실행했을 때 free하기 전 동적할당받은 메모리를 가리키는 포인터 주소와free한 후의 포인터 주소는 여전히 같음이 나옵니다. 그렇다면 free로 해제를 해도 전에 할당받았던 메모리에 대한 주소를 포인터ptr이 여전히 가지고 있다는 것인데이렇게 된다면 free가 무색하게 계속 그 메모리에 접근 할 수 있는 거 아닌가요? 물론 free를 함으로써 그 메모리에 대해 할당하고 회수할 컨트롤 권한? 은 os가 다시 가져간다는 것은 이해했지만약간 명시적인 측면도 있는 건지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
Printf 함수와 putchar 함수 관련 질문입니다.
강의를 듣다가 아래 사진은 제가 직접 짠 코드고 위의 사진은 교수님이 보여주신 정답코드인데 printf함수를 putchar 함수로 바꾸니 원하는 결과가 나왔습니다. Printf함수로는 왜 안되는건가요??
- 미해결홍정모의 따라하며 배우는 C언어
다른 파일 include 관련 질문
안녕하세요. 9.11 강의 17:01에서 강사님께서"현재 상태에서 main.c 함수는 my_print_functions.c 파일에 대해서 알지 못해요"라고 설명해주시는데요.이때 알지 못한다는 것을 compile 단계에서 알지 못한다고 이해해도 괜찮은가요?즉, compile단계에서는 main.c 함수가 my_print_functions.c 파일을 알지 못하지만,linking 단계에서는 linker가 두 파일을 연결해줘서 build가 정상적으로 이루어진다고 이해하면 될까요? 아래 사진처럼 my_print_functions.h 파일을 무시하고 main.c에서 my_print_functions.c 파일을 바로 include해보았는데 에러가 나옵니다. 어떤 부분에서 잘못된 것인가요?
- 해결됨홍정모의 따라하며 배우는 C언어
버퍼 관련 질문
int number;printf("Please Enter a positive number\n");while (scanf("%d", &number) != 1){printf("Please try again\n");while (getchar() != '\n')continue;}이 예제에서while (getchar() != '\n)continue;가 없으면 어떤 알파벳 하나를 입력 했을 때Please try again이 무한으로 출력이 되는데 그 이유가 뭔가요?어떤 알파벳 하나를 입력하고 엔터를 누르면 알파벳 하나는 scanf로 들어가고 \n은 버퍼에 남는 것이 맞죠?그리고 나서는 Please try again을 한번 출력하고다시 scanf로 가서 버퍼에 남았던 \n이 입력으로 들어가서버퍼는 비워지고 (scanf("%d", &number) != 1) 이라는 조건을 만족해 Please try again이 출력되고다시 처음으로 돌아가 scanf 입력을 받기위해 대기해야하는 것 아닌가요?왜 자꾸 please try again이 무한 출력되는지 모르겠어요 도와주세요
- 해결됨홍정모의 따라하며 배우는 C언어
10분 8초경 질문
예제를 실행시켜보면 10분 8초경처럼엔터를 누르면 줄바꿈이 되는게 아니라 커서가 맨 처음으로 돌아가는데이거 왜 이러는 건가요?구글링 해보니까 윈도우에서는 엔터키 입력이 /r/n(캐리지 리턴 및 줄바꿈)이라고 하는데그러면 /r/n이 실행되어서 줄바꿈이되고 커서가 줄바꿈된 줄의 맨 처음으로 돌아가야 하는데왜 /r만 실행이 되는 건가요? 밑의 질문중에 교수님이 답변해주신거에 스택오버플로우 링크가 있던데그건 제가 영어를 못해서 이해를 못하겠더라구요
- 미해결홍정모의 따라하며 배우는 C언어
함수 내 static 변수
안녕하세요코드를 보시면void static_count() { static int ct = 0; printf("static count = %d\n", ct); ct++; }정적변수가 만들어져있는데요,(23:23 부분)이후 main 함수에서static_count(); static_count();를 실행하는데요,프로그램에 박힌 정적변수 ct는 처음에 0이였고 static_count()에 의해 0이 출력되고 값이 1 증가합니다.이후 또 static_count()가 실행돼도 1이라는 값은 보존되어 1로 출력됩니다.그런데 여기서 두 번째 static_count()가 실행될때 마찬가지로void static_count() { static int ct = 0; printf("static count = %d\n", ct); ct++; }를 실행시키는데 이미 정적변수 int ct가 메모리에 살아남아 있을 때해당 코드에서 static int ct = 0코드는 무시가 되는 원리인가요?감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
파일 이름에 따라 다르게 작동하는 이유가 궁금합니다.
안녕하세요. 제가 처음에 프로젝트 이름을 "8.3 Input Output Redirection"으로 작성하고 강의 3:00에서처럼 "8.3 Input Output Redirection.exe"를 입력하여 실행하였더니 아래와 같은 오류가 나왔습니다. '8.3' is not recognized as an internal or external command,operable program or batch file. 그런데 프로젝트 이름을 강사님처럼 "Lecture3"로 변경하니 강의처럼 정상 작동하더라구요. 이름에 따라서 다르게 작동하는 이유가 무엇인가요?만약 다르게 작동한다면 프로젝트 이름을 지을 때부터 신경써야 하나요? 감사합니다.
- 해결됨홍정모의 따라하며 배우는 C언어
3분 11초경 질문
교수님이 마치 os가 된 것 처럼이라고 하셨는데 이게 무슨 뜻인가요?os가 변수의 주소값을 정해줘야하는데프로그래머가 os처럼 변수의 주솟값을 정해줘서 os가 된것처럼 이라고 말씀하시는건가요?
- 해결됨홍정모의 따라하며 배우는 C언어
이렇게 이해한 것이 바르게 이해한 것 인가요?
안녕하세요 반갑습니다. 강의 22분 09초 경의 설명을 보고 부호 없는 정수의 언더 플로우가 헷갈려서 좀 생각을 해봤습니다. unsigned int k = 0; k = k-1; printf("k = %u\n", k);을 하면 k의 비트가 00000000000000000000000000000000였는데 리터럴 1을 빼면 ALU내부에선 -1을 더하게 되는 것과 같고 -1은 11111111111111111111111111111111비트여서 둘의 합연산 결과가 11111111111111111111111111111111이 되고 이걸 %u로 출력해주면 unsigned int의 최대값인 4294967295가 나오는 건가요? 질문 1) 10000비트에서 1을 뺀다는 설명 때문에 약간 헷갈리긴 하는데 직관적으로 이해를 돕기 위해 그렇게 설명해주신 거라고 보면 될까요? 질문 2) 그리고 추가적으로 C언어가 리터럴 상수를 해석하는 과정이 참 흥미로운데 이건 강의 후반부에 다뤄주시나요? 꽤나 궁금하네요. 질문 3) 질문 1) 2) 3)에 각각 대답해주시면 감사 하겠습니다.
- 해결됨홍정모의 따라하며 배우는 C언어
print_binary 함수 코드 질문
void print_binary(unsigned long n){ int remainder = n % 2; if (n >= 2) printf_binary(n / 2); printf("%d", remainder); return;}맨 마지막에 리턴을 해주는데 제가 볼 때는 할 필요가 없어 보이는데 해주는 이유가 뭔가요?
- 미해결홍정모의 따라하며 배우는 C언어
9.9 이진수 변환 recursion 질문건
질문 1)void print_binary(unsigned long n){ if (n > 0) { print_binary((n / 2)); printf("%d", n % 2); }} 이게 제가 작성한 코드입니다. 다름이 아니라 n이 0이 아니면 통과해서 recursion으로 함수 args에 5가 들어가고 그 다음엔 2.5가 들어가고 그 다음엔 1.0이 들어가고 그 다음엔 0.5값이니까 0이 들어가기에 튕깁니다. 그리고 다시 recursion 된 함수에서 돌아오는 과정을 거쳐야하는데 처음엔 5%2 이기에 1 이 출력 그 다음엔 2.5 %2 이기에 0이 출력그 다음엔 1 % 2 이기에 1이 출력 그 다음엔 0% 2 이기에 0이 출력 그리고 끝난다. 라고 생각이 드는데요.혹시 잘못 이해하고 있는게 있을까요? ******질문 2 ) 반면 강습자로부터 작성된 코드는 아래와 같습니다.void print_binary(unsigned long n){ int remainder = n % 2; if (n >= 2) print_binary(n / 2); printf("%d", remainder); return;} 이는 처음 remainder에 10 %2 = 0을 넣고 if 문에 의해 n이 2보다 크거나 같기에 통과 함수에 5를 args로 던지고 5 % 2 = 1 을 넣고if문 통과 후 2.5를 던짐2 % 2 = 0 을 넣고 1을 args로 던짐 1 % 2 = 1 이다. if문을 통과하지 못함그 다음부터의 과정은 recursion을 하느라 작동되지 못한 라인부터 작동되는 것인가요? 그리고 그럴떄 거꾸로 작동되는 이유가 마지막 함수 실행의 값부터 실행되기의 그런건가요?
- 미해결홍정모의 따라하며 배우는 C언어
6.13 초반 문제
로 코드를 작성했는데 337로 하여도 while문이 끝나지않아요 ㅠㅠ
- 해결됨홍정모의 따라하며 배우는 C언어
11분 16초경 질문
프로그램의 흐름이 쭉 가는데 분기가 생겼을 때if 문에서 return을 해준다면 조건을 만족시키지 않는 else에서도 return을 해줘야 한다고 하셨는데왜 그래야 하는 건가요?반환 자료형이 존재할 경우, 그러니까 보이드가 아닐 경우 함수를 호출했을 때 리턴값을 받아야하니 else에서도 return을 해줘야하는 것 인가요?
- 미해결홍정모의 따라하며 배우는 C언어
운영체제 구성 그림에서 입출력 장치의 위치
안녕하세요. "0.3.운영체제가 해주는 일들" 설명을 듣다가 의문점이 생겨서 질문 남깁니다. <그림1>위의 그림을 보면서 저는 사용자가 하드웨어 자원을 사용하기 위해서는 직접 하드웨어를 사용할 수 없기에, 응용 프로그램을 실행하고 응용 프로그램은 커널을 통해 하드웨어 자원을 사용하는 것이라고 이해했습니다. CPU, 메모리, 보조기억 장치는 직접 사용자와 상호작용을 할 수 없다는 것은 이해가 되지만(직접 손으로 조작하여 사용할 수 없기 때문), 입출력 장치는 사용자와 직접 상호작용 한다고 생각했습니다. 왜냐하면 직관적으로 생각을 해보면, 프로그램을 실행 할 때 "마우스로 응용프로그램을 클릭 or 키보드로 명령어 입력(입출력 장치 사용)-> 응용 프로그램 실행-> Kernel을 통한 하드웨어 사용(CPU, 메모리, 보조 기억장치)" 과 같은 과정이 일어나기 때문에, 입출력 장치는 사용자와 제일 먼저 상호작용 하는 것 아닌가? 라는 생각을 했습니다. <그림2>궁금증을 해결하기 위해 검색을 해보니, 다음과 같은 그림을 찾을 수 있었습니다. 위 그림을 보면 키보드 마우스 등등 입출력 장치는 사용자와 가장 먼저 상호작용을 하는 것처럼 나와있고 이는 직관적으로 이해가 됩니다. 요약해서 질문을 드리면 입출력 장치는 사용자와 가장 먼저 상호작용 하는 하드웨어임에도 불구하고 왜 <그림1>에서는 사용자와 가장 멀리 떨어진 부분에 위치하는 지 궁금합니다. 긴 글 읽어주셔서 감사드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
*str 의 값
안녕하세요 교수님께서 10분 30초 쯤에 작성하시던 코드에서while (*str)이라고 작성하신 부분이 있는데요, 이 부분은 *str이 0이 아니면 while문을 진행시킵니다.또한 강의 중while (*str)와 while (*str != '\0')는 같은 역할은 한다고 말씀하신 바가 있습니다. str주소를 하나씩 옮겨가면서 읽을 값은 차례대로 1, 2, 3, 4, 5, \0 인데 \0과 0은 다릅니다.근데 어떻게 *str != 0로 처리돼서 while문이 진행된건지 궁금합니다.