월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
실행문제
아래의 코드가 강의를 들을 땐 잘 실행됐는데 나중에 제가 뭘 잘못 건드린건지 저 코드가 실행이 되지 않습니다. 에러창에는 15번째 줄에 stntax error: '?' 이 있다고 하는데 15번째 줄은 아무 이상이 없어 보입니다. 가운데 흰색창은 구글링해도 뭘 말하는건지 잘 모르겠는데 no를 클릭하니까 없어졌습니다. 코드가 실행되지 않는데 어떻게 해야 할까요? visual studio를 재실행하고 파일도 다시 만들었는데도 계속 저 문구가 나옵니다!
- 미해결홍정모의 따라하며 배우는 C언어
F11(디버거) 누르면 Autos 창이 사라집니다
영상 6:17 쯤 보시면 F11(디버거)을 눌러도 하단에 Autos 창이 그대로 떠있는 상태에서 값만 바뀌는데 저는 F11을 누를때마다 창이 아래로 없어집니다 . 하단의 Autos 창을 직접 눌러서 띄어놓은 다음에 F11을 눌러도 창이 아래로 사라집니다. 어떻게 해야 하나요?
- 해결됨홍정모의 따라하며 배우는 C언어
선생님 질문 있습니다.
상세한 강의 감사합니다. 강의 듣다가 궁금한 점이 생겨서 질문 드립니다. C언어의 이식성이 좋지 않을 수 있어서 자료형의 크기를 고정시키기 위해 고정 너비식 정수를 사용한다는 취지가 있지만 사실은 기존에 있던 것 (int)같은 것들을 int32_t처럼 명시적으로 사이즈를 표현해주기 위해 사용하는 것으로 이해를 했습니다. 결국 비슷한 역할을 한다는 것으로 이해를 했는데요 아직 이해를 하지 못한 점은 왜 굳이 PRId32를 써야하는지를 모르겠습니다. 이게 그냥 ld lld, d중 어떤것을 써야할지 형식 지정자를 명확하게 구분하지 못하겠을 때 PRI와 자료형, 크기만 기입하면 쉽게 출력할 수 있게 만들어주는 역할을 하는건가요?
- 미해결홍정모의 따라하며 배우는 C언어
사용자로부터 데이터 입력을 받는 프로그램
안녕하세요. 표준 입출력 함수랑 그 동작 특성을 공부하다 보니까 사용자로부터 데이터 입력을 받는 프로그램의 경우 생각보다 런타임 오류가 발생할 수 있는 부분이 되게 많더라구요.. 조금 애매한 질문일 수도 있고, 또 경우에 따라 다르겠지만.. 발생할 수 있는 입력 오류나 그것에 대한 예외처리를 어느정도 수준까지 신경써서 코드를 작성하는 게 좋을까요..? 당장 생각나는 건 버퍼 오버플로우나 입력 데이터의 범위 체크 정도인데.. 제가 아직 오픈소스를 볼 만큼 공부가 된 것 같지는 않지만.. 참고할 만한 자료가 있을까요..? 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
2차원 배열과 포인터 개념 질문이 있습니다.
float arr2d[2][4] = { {1.0f,2.0f,3.0f,4.0f},{5.0f,6.0f,7.0f,8.0f} }; float(*pa)[4]; float* ap[2]; pa = arr2d; 강의에서 코드가 이렇게 나오는데 여기서 개념이 헷갈리는게 있습니다. 1. float형 포인터변수 pa는 '원소가 4개짜리인, 이름도 모르는 어떤 배열을 가리키는 포인터 변수' 라고 생각했는데 이게 맞는지(맞다면 이 배열은 초기화를 안해줬으니까 쓰레기값이 들어가있는 건가요?) 2. pa에 arr2d배열의 첫 원소를 가리키는 주소를 넣어줬는데, 그럼 pa가 처음에는 쓰레기 값이 들어있는 배열을 가리켰다가 arr2d의 첫 번째 row(배열)를 가리키게 되는 건지(pa가 정확하게 뭘 가르키는지 조금 헷갈립니다.) 이렇게 질문이 있습니다. 도와주심 감사하겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
이렇게 해도 되나요..?
이렇게 작성해도 되나요..?? 제가 생각한대로 적어봤는데 ㅠ
- 미해결홍정모의 따라하며 배우는 C언어
헤더파일 작성 질문있습니다
헤더파일의 함수 프로토타입만 따로 놔두는게 함수 입출력을 빠르게 보려는ㄱ게 목적이면 프로토타입만 윗줄에 쭉 나열하고 함수는 아래에 작성해놓으면 한파일로 사용할수 있지 않나요? 굳이 헤더파일과 c파일을 하나 더 만드는 이유가 있나요?
- 미해결홍정모의 따라하며 배우는 C언어
소스코드내 함수 중복 오류
안녕하세요 :) 질문이 있어 이렇게 글 남깁니다. 제가 강의를 보면서 매 차시 작성하는 코드를 깔끔하게 정리하고자 하나의 프로젝트 안에서 강의마다 소스코드 파일을 하나씩 만들어 가다가 어느 순간 오류가 나더라구요 (아래 오류 코드) fatal error LNK1169: one or more multiply defined symbols found 그래서 프로그래밍이 처음인 제가 저게 정확하게 무엇인지는 몰라도 one or more multiply defined를 보니 뭔가 중복이 됬다는 것 같아서 중복이 될 만한 int main()을 보니 제가 int main()이 여러개인 상태를 방지하고자 int main1()로 변형해서 놓은 게 겹쳐버려서 생긴 문제더라구요.(실행하고자 하는 소스코드 외의 소스코드 파일에서 int main()꼴은 서로 겹치지 않고 실행되지 않게끔 이름을 바꿈) 서론이 길었네요 죄송합니다.1) 그래서 제가 묻고자 하는 것은 한 프로젝트 내에서 어떤 함수건 이름을 같게 하면 안 되나요? 2) 그리고 특정 소스코드파일에서 int main()함수가 없다면 그 다음에 있는 함수가 자동으로 실행이 되나요? 3) 번외로 2:42부분에 void say_hello(void) {} 이라고 되어 있는 부분에서 맨 앞의 void는 출력할 값이 없으니 공백?의 뜻을 지니고 있는 void를 쓰는 것이고 ()안의 void는 마찬가지로 입력할 값이 없으니 공백의 의미를 지닌 void를 쓰는 것인가요? 긴글 읽어주셔서 감사합니다
- 미해결홍정모의 따라하며 배우는 C언어
변수 메모리 주소
안녕하세요 :D 강의에서 변수를 통해 프로그래머가 번거롭게 메모리 주소를 잡아 데이터를 넣는 과정을 생략하고 변수명을 매개체로 변수에 어떤 데이터를 선언해서 특정 메모리 주소로 간접적으로 값을 넣는 것이라고 이해했는데 예를 들면 int a; a = 1; 은 a라는 변수가 램에서 메모리 주소를 하나는 갖고 있고 거기에 1를 대입하는 코드인데 이때 a에 매칭되는 메모리 주소는 C언어 시스템에서 자동적으로 정해주나요? 그리고 이를 프로그래머가 직접 잡아 줄 수도 있나요?
- 미해결홍정모의 따라하며 배우는 C언어
사용자의 키보드 입력을 받는 함수 scanf(), getchar(), gets().. 에서 질문
키보드로 데이터를 입력하고 실행 결과를 확인 해보면 항상 자동으로 줄바꿈이 되어 있는데, 이게 입력 버퍼에 저장된 개행 문자랑은 상관이 없는 건가요..? 함수 내부에서 자동으로 줄바꿈을 해주는 건가요?? 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
fgets(), gets()에서 입력 버퍼에 저장된 '\n' 처리 방식 차이점 질문..
코드랑 실행화면 첨부합니다.. fgets 함수나 gets 함수 모두 입력 버퍼에서 '\n'을 만날 때까지 문자열을 읽어 들이는 건 같지만, 이후 '\n'를 처리하는 방식이 다른 것 같아서 질문 드립니다. fgets 함수의 경우 '\n'를 제외시키거나 버리지 않고 문자열의 일부로 저장하는데 (이 경우 'A' 'p' 'p' 'l' 'e' '\n' '\0'), gets 함수의 경우에는 (이 경우 'B' 'a' 'n' 'n' 'a' 'a' '\0')를 저장하고 이후 입력 버퍼에 남아 있는 '\n'를 어떻게 처리하는 지 궁금해서 변수 a에 대해서 scanf 함수를 호출 해봤습니다. 만약 입력 버퍼에 '\n'가 계속 남아 있었다면 scanf 함수를 호출 했을 때 사용자의 입력을 기다리지 않고 변수 a에 '\n'가 바로 저장되고 프로그램이 종료될 거라고 생각했는데, scanf 함수가 입력을 받는 것을 보니... 입력 버퍼에 남아 있던 '\n'는 어디로 가버린 걸까요..? gets 함수가 내부적으로 처리를 해준 걸까요?? 구글링을 해도 해결이 잘 안돼서 질문 올립니다.. 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
영어 사용 이유
강의 중간에 Visual Studio를 설치할 때 가급적이면 한국어 말고 영어를 선택해서 쓰라고 하셨는데 왜 그런지 알고싶습니다. 한국어로 하면 어떤 문제가 생기나요?
- 미해결홍정모의 따라하며 배우는 C언어
free()함수의 정확한 용법 ( realloc함수와 free함수의 관계)
해당 코드는 메모리 누수 강의에서 포인터를 백업하는 과정의 일부입니다. 제가 궁금한 것은 free()함수가 메모리를 반환한다는 개념이 아니라 그 내부의 메모리는 그대로 두돼, 사용하지 않는다의 개념이 가깝다고 들었습니다. 그렇다면 저 코드에서 free로 heap 메모리를 사용하지 못하게 하더라도 그대로 메모리 데이터 값이 나와야 하는 것이 아닌가요 ? 이와 상충되는 느낌을 realloc 강의에서 받았습니다. 다른 질문글을 보니 realloc()함수는 free()의 기능도 동시에 한다고 들었습니다 free()함수를 탑재하고 있는 realloc()함수를 이용했는데 해당 코드에서는 ptr[0]에 접근하여 데이터 값을 출력할 수 있습니다. 첫번째 사진 코드 대로라면은 free()는 아예 해당 메모리에 접근할 수 없는 것이고 두번째 사진 코드 대로라면은 free()는 접근은 가능하나 이용할 수 없습니다. 이 두 가지 개념이 혼동되어 질문드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
14.9 강의 예제 실행이 안되요
강의 내용 그대로 따라한거 같은데 저는 왜이렇게 오류가 많이 뜰까요?
- 미해결홍정모의 따라하며 배우는 C언어
"지정된 파일을 찾을 수 없습니다." 어떻게 해결하나요
전에는 잘 실행 됐었는데 오랜만에 했더니 이런 문구가 뜹니다 .. 어떻게 해결해야 하나요?
- 미해결홍정모의 따라하며 배우는 C언어
스택 영역은 컴퓨터 구조에서 어디에 있나요? 램? 저장장치?
제목 그대로입니다! 저장장치에 저장되어 있다가 가져와서 쓰는건지 램? 캐쉬 메모리?에서 바로 쓰는건지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
(10.14) , 9분 23초 질문
39번째 줄에 *(*(arr2d+j)+i)+=1.0f; 를 없애도 똑같이 실행되어서 없어도 되는 것 같은데, for문에 왜 들어가있는지 잘 모르겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
for문에서 지역변수 scope 관련 질문
변수 num의 scope가 for문 블록 {}이라서 반복 수행을 할 때마다 메모리상에서 할당되었다가 소멸되는 것을 반복하는 것은 알겠는데.. 그럼 for문 초기식에서 선언된 변수 i의 scope는 정확히 어떻게 되는 건가요?? 물론 변수 i는 for문의 초기식에서 지역변수로 선언된 거기 때문에 for문을 탈출하면 메모리상에서 사라지겠지만 접근할 수 있는 범위나 메모리상에 존재하는 기간만 놓고 봐도 변수 num보다는 scope가 넓은 것 같은데 정확한 scope를 모르겠어서 질문올립니다.. 감사합니다.
- 해결됨홍정모의 따라하며 배우는 C언어
다중 구조체로 구성된 자료구조에서 위치를 이동하는 함수 구현에 대한 질문입니다.
안녕하세요. 이 강의를 완강하고 부록 강의도 수강하다 의문이 생겨 질문드립니다. 이 강의와는 좀 거리가 있는 질문이긴 하지만 부록 강의에 올리면 질문 확인에 시간이 오래 걸릴것 같아 부득이하게 여기에 올립니다. 해당 코드는 제가 이진 트리(부록 강의 17.17)예제의 일부를 풀어본 것입니다. #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdbool.h> #define TMAX 20 #define MAXITEM 20 #define SPACING 30 void initialize(Tree* ptree); bool empty_tree(const Tree* ptree); bool full_tree(const Tree* ptree); int item_count(const Tree* ptree); int compare(const Item first, const Item second); Node* make_node(const Item* pi); // 요점 void move_to_index(movies** Head, int index); // 구현 목표 bool add_item(const Item* pi, Tree* ptree); // typedef struct { char character[TMAX]; char name[TMAX]; } Item; typedef struct node { Item item; struct node* left; struct node* right; } Node; typedef struct tree { Node* root; int size; } Tree; // 출력 함수 void print_item(Item item) { printf("%s (%s)\n", item.character, item.name); } void print_graph(Node* root, int space) { space += SPACING; if (root == NULL) { for (int i = SPACING; i < space; i++) printf(" "); printf("NULL"); return; } print_graph(root->right, space); printf("\n"); for (int i = SPACING; i < space; i++) printf(" "); print_item(root->item); print_graph(root->left, space); } void print_tree(Tree* ptree) { printf("\n--------Print Start--------\n"); print_graph(ptree->root, 0); // 그래프 출력 printf("\n---------Print End---------\n"); } // 출력 함수 int main() { Item items[] = { {"Iron Man","Tony Stark"}, {"Thor","Thor Odinson"}, {"Ant Man","Hank Pym"}, {"Wasp","Janet van Dyne"}, {"Hulk","Bruce Banner"}, {"Captain America","Strve Rogers"}, {"Scarlet Witch","Wanda Maximoff"}, {"Black Widow","Natasha Romanoff"}, {"Dr. Strange","Stephen Strange"}, {"Daredevil","Matthew Murdock"}, {"Punisher", "Frank Castle"}, {"Batman","Bruce Wayne"} }; int n = sizeof(items) / sizeof(items[0]); Tree tree; initialize(&tree); for (int i = 0; i < n; ++i) if (!add_item(&items[i], &tree)) break; print_tree(&tree); return 0; } // 편집 함수 static Node* make_node(const Item* pi) { Node* MakeNode = (Node*)malloc(sizeof(Node)); MakeNode->item = *pi; MakeNode->left = MakeNode->right = NULL; return MakeNode; } void initialize(Tree* ptree) { ptree->root = NULL; ptree->size = 0; } bool empty_tree(const Tree* ptree) { if (ptree->size == 0) return true; return false; } bool full_tree(const Tree* ptree) { if (ptree->size == MAXITEM) return true; return false; } int item_count(const Tree* ptree) { return ptree->size; } int compare(const Item first, const Item second) { return strcmp(first.character, second.character); } 우선 이 질문에 별로 필요하지 않는 부분은 지우고 하나의 소스파일에 모았습니다. 여기서 제가 구현하려고한 함수는 move_to_index입니다. 우선 add_item함수 코드입니다. bool add_item(const Item* pi, Tree* ptree) { if (full_tree(ptree)) { puts("Can't add more item."); return false; } if (ptree->root == NULL) { ptree->root = make_node(pi); ptree->size++; return true; } Node* AddItem = ptree->root; // 코드 가독성 위해 Node* 변수 사용 while (1) { int comp = compare(AddItem->item, *pi); if (comp == 0) { puts("Can't add duplicated item."); return false; } if (comp > 0) { if (AddItem->left != NULL) AddItem = AddItem->left; else { AddItem->left = make_node(pi); ptree->size++; return true; } } else { if (AddItem->right != NULL) AddItem = AddItem->right; else { AddItem->right = make_node(pi); ptree->size++; return true; } } } } 해당 함수는 트리에 새로운 노드를 추가하는 함수로 별 이상없이 작동합니다. 하지만 저는 이 함수에서 노드를 추가할 위치까지 이동하는 while 반복문을 사용자가 목표로 하는 노드까지 이동하는 별개의 함수로 구현하여 이를 노드의 추가 뿐만 아니라 삭제, 검색등 여러 작업에 사용하려고 했습니다. // 구현 실패 int goto_index(const Item* pi, Tree* ptree) { Node* Index = ptree->root; while (1) { int comp = compare(Index->item, *pi); if (comp == 0) return 0; if (comp > 0) // comp == 1 { if (Index->left == NULL) { ptree->root = Index; return 1; } Index = Index->left; } else // comp == -1 { if (Index->right == NULL) { ptree->root = Index; return -1; } Index = Index->right; } } } bool add_item(const Item* pi, Tree* ptree) { if (full_tree(ptree)) { puts("Can't add more item."); return false; } if (ptree->root == NULL) { ptree->root = make_node(pi); ptree->size++; return true; } int AddItem = goto_index(pi, ptree); // goto_index로 ptree의 포인터 이동 실패. 첫 노드 포인터 유지 if (AddItem == 0) { puts("Can't add duplicated item."); return false; } if (AddItem > 0) ptree->root->left = make_node(pi); else ptree->root->right = make_node(pi); ptree->size++; return true; } 하지만 해당 코드는 물론이고 매개변수를 이차원 포인터나 Tree* 형 변수로 바꿔보는 등 여러 시도를 해봤지만 모두 작동하질 않았습니다. 이 문제의 원인이 무엇인가요? 뭔가 풀릴듯 하면서 풀리지 않아 참 답답합니다. 답변 부탁드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
선언이 필요하다는 경고
안녕하세요. 선생님이 코드를 써 내려가시기 전에 일시정지하고 제 나름대로 코드를 쓰다가 문제가 생겨서 질문을 남겼습니다. int main() { int a, b, power, i; printf("a^b\n"); while (1) { printf("a = "); scanf("%d", &a); printf("b = "); scanf("%d", &b); for (i = 0, power = 1; i < b; ++i) { power = power * a; } printf("%d\n", power); } return 0; } 질문: for문에 { }를 씌우면 return 0; 다음의 }에 빨간 밑줄이 그이면서 오류가 뜨고 선언이 필요하다고 합니다. { }를 벗겨 내면 오류가 없어지고요. 실행은 됩니다. 제 코드에 문제가 있나요?