월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨홍정모의 따라하며 배우는 C언어
3:00쯤에 selctionSort함수를 이런식으로 작성해도 괜찮나요??
void selectionSort(char* arr[], int n){ for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (strcmp(arr[j], arr[i]) < 0) swap(&arr[i], &arr[j]); } }}
- 미해결홍정모의 따라하며 배우는 C언어
6-15강 첫번째 예제 질문
사용자로부터 첫번째 문자와 마지막 문자, 그리고 몇번 반복할건지를 직접 입력받는 경우를 가정하여 다음과 같이 코딩해봤습니다.문자를 입력받고, 정수로 형변환한 후, 정수를 한개씩 늘려가다가 사용자가 지정한 마지막 문자를 만나면 멈추고 다시 문자로 출력되도록 하면 되겠다 싶어 작성한 코드입니다.첫번째 scanf까지는 정상적으로 작동하는데 두번째 scanf값을 입력하면 실행창이 꺼져버립니다. 어느 부분에서 오류가 발생한건지 알 수 있을까요?
- 미해결홍정모의 따라하며 배우는 C언어
6-1강 첫번째 예제 질문
코드 처음에 num과 sum 변수를 0으로 초기화 해줘야만 코드만 실행되는 이유는 무엇인가요? 0으로 초기화하지 않고 실행했을때 오류가 나는 이유도 궁금합니다
- 미해결홍정모의 따라하며 배우는 C언어
VScode 컴파일러 경로 설정
컴파일러 경로에 C:\msys64\mingw64\bin\g++.exe가 나타나지 않아서 C:\msys64\ucrt\bin\g++.exe로 설정을 했고 환경변수에는 C:\msys64\mingw64\bin으로 입력을 해놓았는데 나중에 문제가 생기지 않을까요?테스트코드 실행했을 때는 문제없이 컴파일되긴 했는데.. mingw로 맞추고 싶은데 ucrt만 뜨는 이유가 뭔가요?
- 미해결홍정모의 따라하며 배우는 C언어
14.11강 9:51 부분 질문
안녕하세요. 강의에서 64번째 줄 코드 *pf2 = *pf1;을 어떻게 해석해야 하는지 잘 모르겠습니다.컴파일러는 런타임에 일어나는 일을 모르기 때문에 동적 할당으로 받은 메모리는 복사하지 못한다고 이해하면 될까요?memcpy를 이용한다면 다음과 같이 작성하면 되나요? memcpy(pf2, pf, 40);pf2 = pf;로 변경하여 실행하면 런타임 에러가 나는데, 그 이유를 2번처럼 이해하면 될까요? 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
scanf문 실행 순서 다름
(수정) - 엔터가 다 사라져서 저장이 됬네요;;안녕하세요, 코드는 하기와 같이 교수님과 똑같이 적었습니다. char str[255];int i, i2;double d;scanf("%s %d %lf\n", str, &i, &d); // hello 3 3.14printf("%s %d %f\n", str, i, d); scanf("%s %d %d\n", str, &i, &i2); // abc 1 1.23printf("%s %d %d\n", str, i, i2);그런데 실행 순서가 다릅니다. 강의 영상처럼 첫번째 scanf가 실행되고 바로 printf 가 실행된 후 두번째 scanf가 실행되는게 아니라, 한꺼번에 입력을 받고 한꺼번에 출력합니다... 뭐가 문제일까요? 디버거로 찍어봤는데 하기와 같습니다.release 모드로 돌렸는데 그거랑은 상관없겠죠..?
- 미해결홍정모의 따라하며 배우는 C언어
3.1-6분
표에 나오는 십진수 정밀도란 무엇을 뜻하나요?
- 미해결홍정모의 따라하며 배우는 C언어
제가 이해한 것이 맞는지 긴가민가해요
int arr[2][3] = { {1,2,3},{4,5,6} };에서결과적으로 주소값은 모두 같겠지만 배열명 arr이 가르키는 것은 이차원 배열의 첫번째 행이고, arr[0]이 가르키는 것은 배열의 첫번째 행의 첫번째 원소가 맞나요?
- 해결됨홍정모의 따라하며 배우는 C언어
5분 41초경 7분 45초경 질문
여기서객체가 생기는 위치가 딱 고정되어 있냐 아니냐 그 기준으로 보시면 됩니다.이 부분이 잘 이해가 안되는데객체가 생기는 메모리의 위치가 객체가 고정되는 특징(데이터 또는 BSS segment의 특징?)을 가지고 있냐 아니냐이렇게 교수님 말씀을 이해해도 괜찮을까요? 그리고7분 45초 에서 교수님이 하시는 말씀의 순서가 좀 복잡해서 이해가 잘 안됬는데사실은 프로그래머들이 편리하도록 자동적으로 영역과 지속 기간을 관리해주는 성질을 가질 수 있게스택이란 공간을 만들고 거기에 저장을 하는 것이다.라고 제가 정리를 좀 해봤어요 이 정리가 맞는 표현인가요? 항상 좋은 답변 정말 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
12분 경 질문
여기서 i=3이라고 했을 때 printf에서 왜 2로 출력되는지 궁금합니다. 감소 연산자 시그널이 없어서 3으로 나와야 하는 것이 아닌 건가요?
- 미해결홍정모의 따라하며 배우는 C언어
10분 58초 경 질문
전위 연산자가 붙어있는 j에서 일단 증가를 시키고 대입한다고 하셨는데 그게 무슨 뜻인지 이해가 되지 않습니다.
- 미해결홍정모의 따라하며 배우는 C언어
4분 33초 경에 질문이 있습니다.
&arr[0][0]은 그냥 주소값이지 포인터가 아니지 않나요? 너무 헷갈립니다..ㅠ주소값에다 정수를 더해서 너무 혼란스럽습니다... 이게 포인터면 +1을 하면 int 크기만큼 건너뛴다는건 알겠는데 저건 주소값인데 +1을 할 수 있는건가요?
- 미해결홍정모의 따라하며 배우는 C언어
scanf()가 잘못된 입력을 읽을 때 행동
안녕하세요,이 코드에서 'a 2 3 '을 입력 후 'b 4 5'를 입력하면, 두번째 while문이 돌아갈때 입력버퍼에 남아있는 ' \nb 4 5' 중 ' '는 c로 들어가고, 다음 %d를 읽으려 할때 '\n' 와 %d가 매칭되지 않아 scanf가 종료되고, rows와 cols는 기존 2 와 3이 유지되어 하기와 같이 결과가 나오는 것을 이해를 했습니다.핵심은 버퍼에 남아있는 ' \nb 4 5' 중 '\n'은 scanf가 읽다가 포기하고 버려졌다 라는 건데요,(이게 스트림이 옮겨졌다고 표현하는게 맞나요?) 이를 테스트하기 위해 하기와 같이 코드를 짜봤는데, 또 아닌 것 같아서요..만약 제가 깨달은게 사실이라면,제가 예상한 결과 ->이 코드를 실행시키고 입력창에 'hello'를 입력하고 엔터를 치는 순간 입력 버퍼에 'hello\n' 이 들어가게되고,첫번째 while문의 scanf() 가 실행될때 %d와 hello가 매칭되지 않으므로 scanf를 종료. scanf가 비정상적으로 종료되었으므로, 입력버퍼에 있는 'hello\n'에서 hello는 버려지고, \n으로 스트림이 옮겨짐. 두번째 while문 조건에서 c에는 \n이 저장되고, 조건문이 거짓이므로 바로 break;가 실행되어 종료됨.실제 결과 ->두번째 while문의 putchar까지 실행됨. 왜 차이가 발생한건지 궁금합니다.
- 해결됨홍정모의 따라하며 배우는 C언어
5분 35초경 질문
헤더파일 안에서 static으로 변수를 선언해줘도 되는 이유는C파일에서 그 헤더파일을 불러왔을 때그 C파일의 파일 스코프에서 static으로 변수를 선언 해주는 것과 같아서인가요?얘를 들어 #pragma oncestatic const double PI = 3.141592;static const double gravity = 9.8;이런 내용의 PIgravity.h라는 이름의 헤더 파일이 있고 main.c 파일에서#include "PIgravity.h"이렇게 해주면main.c 파일의 파일 스코프에static const double PI = 3.141592;static const double gravity = 9.8;이렇게 선언된 것과 비슷한 거라서 가능한건가요?
- 해결됨홍정모의 따라하며 배우는 C언어
realloc() 함수 질문이 있습니다.
int* ptr = NULL;ptr = (int*)calloc(n, sizeof(int)); // contiguous allocation if (!ptr) exit(1); for (int i = 0; i < n; ++i) printf("%d ", ptr[i]);printf("\n"); for (int i = 0; i < n; ++i) ptr[i] = i + 1; n = 20; int* ptr2 = NULL;ptr2 = (int*)realloc(ptr, n * sizeof(int)); realloc() 함수에서 메모리를 새로 할당 해줄 수 없을 경우 NULL 값을 반환해준다고 했는데그 때 원래 있던 ptr은 어떻게 되는 건가요? 그대로 남아있는 건가요 아니면 free를 한 상태가 되는 것 인가요?realloc() 함수는 원래 있던 포인터에 대한 할당 받은 메모리 공간은 free를 한 상태로 바꿔준다고 했는데이렇게 NULL 값을 반환해 줄 때도 원래 있던 메모리 공간을 free한 상태로 바꿔주는 건지 궁금해서요 항상 좋은 답변 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
_getche() 엔터키 입력시 커서가 맨 앞으로 돌아가는 이유
안녕하세요,abc 입력하면이렇게 a에서 깜박깜박 다음 신호 입력을 대기하는 상태가 되는데요, 그 이유를 추측해봤습니다.1, _getche 는 엔터키를 만나면 '\r' 을 반환. getchar()는 '\n' 을 반환.2, '\r' 는 carriage return, 캐리지 리턴이라고 해서 커서를 현재 줄의 맨 앞으로 이동시킴. '\n' 은 new lien, 이 문자는 커서를 다음 줄로 이동시킴.3, 따라서 abc를 입력하고 엔터키를 누르는 순간 putchar('\n')가 아닌 putchar('\r') 가 실행되어 커서가 맨 앞으로 이동.4, 종료조건인 ch != '\r' 에 해당되지도 않으므로 (ch는 '\t') while문이 종료되지 않고 다음 입력을 기다림. 맞나요?? 디버거 찍어보니까 ch가 '\r' 이더라구요 '\n'일줄 알았는데 -_-;; 시간 날린거같아서 짜증납니다ㅠ
- 해결됨홍정모의 따라하며 배우는 C언어
defining declaration이 뭔지 이해가 안됩니다.
전 강의에서도 교수님이 직접적으로 설명을 해주진 않으신 것 같은데그래서 그런지 이게 정확히 뭔지 감이 안 잡히네요. 좀 알려주세요! 항상 좋은 답변 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
이중포인터
char* arr[] = { "Cherry", "AppleBee", "Pineapple", "Apple", "Orange" }; 인 상태입니다. 이때 swap함수는 void swap(char** a, char** b) { int temp = *a; *a = *b; *b = temp; } 이고 swap(&arr[i], &arr[min_idx]);를 했을 때 두 주소값이 바뀌는 걸 알 수 있습니다. 그런데 이때 파라미터가 이중포인터인 이유가 조금 햇갈립니다. swap함수에 있는 파라미터 a와 b는 그 함수에서만 작동하는 게 아니라 직접 arr함수의 메모리에 작동해야되기 때문에 포인터를 쓰는 것이잖아요? 이떄 a와 b는 각각 그 주소의 포인터가 될 것인데 이때 그냥 포인터가 아니라 이중포인터가 붙는 이유는 arr 자체가 포인터의 배열로서 이중포인터니까 접근하려면 이중포인터 표시를 해야된다라고 생각하면 될까요? (이정도만 생각하면 되는 건지 고민이네요) 만약 그렇다면 이때 a와 b에 디퍼런싱을 한 번만 해서 값을 바꾸는 이유는 우리가 바꾸려는 건 주소값이지 글자 하나를 바꾸는 게 아니기 떄문이다 라고 생각하면 될까요?
- 미해결홍정모의 따라하며 배우는 C언어
포인터에 [ ]을 붙이는건 새로운 문법인가요??
ptr[k]부분이 이해가 가질 않아서요...다른 분들이 올린 질문도 봤는데 2차원 배열도 결국엔 1차원으로 정렬된 메모리라는건 어느정도 이해가 된 것 같은데...포인터 옆에 [ ]를 붙이는 것이 간접 참조 연산자랑 같은 기능을 하는건지 궁금합니다..
- 해결됨홍정모의 따라하며 배우는 C언어
tool() 함수 위치에 따른 에러
안녕하세요,main.c 와 second.c 에서 각각 하기와 같이 적어봤습니다.프로그램을 실행시키면, 하기와 같은 에러가 뜨는데요, undefined warning이 뜨는 이유는 main()함수에서 fun_second()를 실행시, fun_second()로 가서 tool()함수를 실행하려 했으나 전방선언이 되어있는것도 아니고 함수 선언부+몸체가 fun_second() 보다 앞쪽에 정의되있지 않기때문에 tool()함수를 발견할 수 없어 undfined에러가 뜬 것으로 이해했습니다.그런데 redefinition 에러가 뜬건 이해가 잘 되지 않습니다.tool()함수는 fun_second()아래 한번만 정의했는데 어째서 중복 정의라는 에러가 뜬걸까요??수박님 제가 질문한 글에 달아주신 답변 말고도, 다른 질문글에 달아주신 답변들이 독학하는데 정말 큰 도움이 됩니다. 항상 감사합니다.