월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
static함수 포인터 리턴
VS 2022 를 쓰는데 static으로 선언해준 변수를 포인터로 반환해줬을 때 Warning이 아니라 Error로 뜨네요. 물론 count함수, static함수 둘다 입니다. 컴파일러 차이일까요. error C2040: 'static_count': 'int *()' differs in levels of indirection from 'void ()' int ct = 0; return &ct; static int ct = 0; return &ct;
- 미해결홍정모의 따라하며 배우는 C언어
vscode external linkage
안녕하세요 교수님. vscode에서 external linkage를 시도했는데 안 돼서 구글에서 찾다가 못 찾아서 질문을 남깁니다. vscode에서는 external linkage가 안 되는 건가요? #include를 사용하는 방법으로 가능하다는 것은 알고 있습니다! 그냥 vscode에서 external linkage가 가능한지가 궁금합니다!
- 미해결홍정모의 따라하며 배우는 C언어
익명 구조체를 쓰는이유?
struct person { int id; struct { char first[20]; char last[20]; }; }; struct person2 { int id; char first[20]; char last[20]; }; 위의 코드와 아래의 코드는 접근방식이 완전히 똑같다고 볼수있는데 굳이 익명구조체를 쓸 필요가 있나요? 익명구조체만이 가지는 어떤 장점같은게 있는걸까요
- 미해결홍정모의 따라하며 배우는 C언어
동적할당에 관한 질문입니다.
이 챕터에서 질문하기에는 좀 그런거일수도 있는데... 이부분을 배웠는지 기억이 안나서요 예를들자면 강의에서의 예제를 기준으로 struct flex* pf = (struct flex*)malloc(sizeof(struct flex) + n * sizeof(double)); n 이 3일때 flexible array 의 크기를 double 형 값을 최대 3개까지 저장가능한 크기로 할당하는건데... 왜 4개 이상의 값을 넣어도 전혀 에러가 발생하지 않고 오히려 잘 작동하는지가 궁금하네요... 주소값도 8byte 간격으로 잘 나오고요. 이러면 메모리를 할당하는 의미가 없는거 아닌가요?? 제가 뭘 잘못 알고있는지 궁금합니다. 위의 구조체 말고 일반적인 동적할당에서도 똑같네요. 아 그리고 궁금한게 한가지 더있는데 구조체 변수의 주소와 구조체의 첫번째 주소값은 같잖아요 struct flex { size_t count; double value[] } 여기에서 struct flex* pf = (struct flex*)malloc(sizeof(struct flex) + n * sizeof(double)); 이렇게 했을때 pf 값과 &pf->count 의 값이 똑같은데 왜 *pf 의 값은 pf->count 의 값이 아니라 다른 이상한 값이 나오는지가 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
scanf 오류
- scanf 쓸려면 scanf 쓴 줄에 빨간줄이 쳐지면서 이러한 경고문이 뜨는데 어떻게 해결해야 하나요??? <경고문> 1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppBuild.targets(491,5): warning MSB8028: 중간 디렉터리(Debug\)에 다른 프로젝트(myfirstproject.vcxproj)에서 공유하는 파일이 포함되어 있습니다. 이로 인해 잘못된 정리 및 다시 빌드 동작이 수행될 수 있습니다. #define _CRT_SECURE_NO_WARNINGS은 전처리를 해줬는데..무슨 문제인지 모르겠습니다ㅠㅠ Q2)또 다른 scanf의 오류가 나타났는데요! 아래 오류에 scanf 대신 scanf_s를 사용하라는 식의 오류가 나타났는데 이 오류는 왜 발생한것인가요???
- 미해결홍정모의 따라하며 배우는 C언어
문자 입출력 관련 질문입니다
문자를 입력받을때 사용하는 자료형으로 char를 사용한다고 가르쳐주셨습니다. 다만 char는 하나의 문자만 저장이 가능하기 때문에 입력 받은 값이 두개 이상의 문자일때는 맨앞의 첫글자만 저장되고 이후 부분은 다 날아가기 때문에 char의 배열을 만드는 방법을 사용해야한다고 하셨습니다. 즉 banana 라는 값을 저장하기 위해서는 길이가 최소 7 이상의 배열을 준비해야 [b][a][n][a][n][a][\0] 의 형태로 저장이 가능하다고 이해를 했습니다. 1. 다만 일일이 입력하려고 하는 값의 크기 이상의 길이를 가진 배열을 초기화하는 것이나, 배열을 출력할때 사소하지만 그래서 더 놓치기 쉬운 출력문의 변경점 등의 이유로 다소 번거롭다고 느꼈는데, c의 자료형에는 java의 string과 같이 문자열 자체를 입력 받을 수 있는 자료형은 없나요? 2. char의 배열을 이용해 문자열을 입력했을때 중간에 스페이스바로 공란을 입력하니 공란 이후의 값이 출력되지 않았습니다. char에 공란은 저장을 못하기 때문에 이후 값이 날아간건가요?
- 미해결홍정모의 따라하며 배우는 C언어
scanf("%[^\n]%*c) 질문
char test[20]; scanf("%[^\n]", test); 다름이 아니라 *c의 뜻이 \n을 지우라는 뜻인데 *c가 없어도 \n이 지워져서 test 저장됩니다. 이거 제가 뭔가를 착각하고 있는건가요?
- 해결됨홍정모의 따라하며 배우는 C언어
입력버퍼의 초기화 방법 질문입니다.
수고많으십니다. 제목대로 입력 버퍼의 초기화에 대해서 궁금증이 있어 질문 올립니다. #include <stdio.h> int pow(int base, int exp); int main() { int base, exp, q = 2; while (q == 2) { printf("Base and Exp : "); q = scanf("%d %d", &base, &exp); if (q != 2) { printf("Worng enter\n\n"); rewind(stdin); //while (getchar() != '\n'); q = 2; continue; } printf("%d exp %d : %d\n\n", base, exp, pow(base, exp)); } return 0; } int pow(int base, int exp) { int result = 1; for (int i = 0; i < exp; ++i) result *= base; return result; } 이번 강의의 예제를 나름대로 만들어 보았습니다. 저는 입력 버퍼로 인한 오류를 많이 격어서 입력 버퍼를 초기화하는 방법을 찾아보다 rewind(stdin);를 발견하여 사용했습니다. 그런대 강의 커뮤니티의 질문들을 살펴보니 대다수가 버퍼 초기화에 while (getchar() != '\n');를 사용하고 있었습니다. (참고로 전 아직 이 강의까지만 수강했습니다.) 요점은 rewind(stdin); 와 while (getchar() != '\n'); 의 기능적인 차이가 있는지, rewind(stdin);을 사용할때 위험성이 있는지 알고 싶습니다. 답변 부탁드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
9.1 질문드립니다
안녕하세요! 오류가 나서 계속 헤매다가 이렇게 질문드립니다ㅠㅠ 9.1 강의에 나오는 코드 중에서(해당 코드 타임라인 21:35 ~ 23:05) 아래와 같이 강의내용과 동일하게 코드를 입력했는데 이런 오류가 떠서 질문 드립니다 봐주셔서 감사합니다ㅠㅠ #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdbool.h> #define WIDTH 30 #define NAME "Jeong-Mo Hong" #define ADDRESS "Seoul, Korea" void print_multiple_chars(char c, int n_stars) { for (int i = 0; i < n_stars; ++i) printf("%c", c); } void print_centered_str(char str[]) { int n_blanks = 0; n_blanks = (WIDTH - strlen(str)) / 2; print_multiple_chars(' ', n_blanks); printf("%s\n", str); } int main() { int n_blanks = 0; print_multiple_chars('*', WIDTH); printf("\n"); print_centered_str(NAME); n_blanks = (WIDTH - strlen(ADDRESS)) / 2; print_multiple_chars(' ', n_blanks); printf("%s\n", ADDRESS); //printf(" %s\n", ADDRESS); print_multiple_chars('*', WIDTH); return 0; }
- 미해결홍정모의 따라하며 배우는 C언어
selectionSort 함수구현 1시간걸림
void swap(int* xp, int* yp); void printArray(int arr[], int size); void selectionSort(int arr[], int n); int main() { int arr[] = { 64, 25, 12, 22, 11 }; int n = sizeof(arr) / sizeof(arr[0]); selectionSort(arr, n); // ascending order printArray(arr, n); return 0; } void swap(int* xp, int* yp) { int save = *xp; *xp = *yp; *yp = save; } void selectionSort(int arr[], int n) { while (n) { int i = 1; int* min_idx = arr; while (i < n) { min_idx = (*min_idx < *(arr + i)) ? min_idx : &arr[i]; i++; } swap(arr, min_idx); arr++; n--; } } void printArray(int arr[], int size) { for (int i = 0; i < size; i++) printf("Sort = %d\n", arr[i]); } 코드 안보고 나름 깔끔하게 해봤습니다. 한시간걸렸네요. 확실히 전 강의에서 strlen()함수부터 strpbhr(), strstr()까지 직접 구현해보면서 공부해보니 나름 정리가 되는 느낌이네요. 삼항연산자 처음에 배운 뒤로 잘 쓴 적 없어서 복습겸 넣어봤습니다. 최솟값 등을 구할 때 제일인 것 같아서요. 최대한 포인터를 이용하려고 했고, 결과물은 잘 나온 것 같아요. 좋은 코드가 아니라면 피드백 부탁드립니다.
- 해결됨홍정모의 따라하며 배우는 C언어
VS code int type의 pointer의 size는 8 byte
10:30분쯤 코드강의에서 포인터로 선언된 변수의 size는 컴파일러에 따라 런타임시에 결정된다고 보았습니다.VS code에서 아래와 같이 작성하면 int의 sizeof는 4 byte인데int type의 pointer의 size는 8 byte입니다.4byte라면 int type이니까 그런가보다 할거 같은데왜 gcc에서의 int type pointer size는 8 byte일까요?
- 미해결홍정모의 따라하며 배우는 C언어
함수 구현 질문
인터넷에서 찾아보던 중 char* my_strcpy(char* destination, const char* source); 을 프로토타입으로 쓰는 함수가 있었는데, 제가 기억을 못하는 것 같아서 질문드립니다. 보통 저희는 포인터로 받더라도 함수 프로토타입중 매개변수에만 에스테리크를 붙이곤 했는데 함수 자료형에다 에스테리크를 붙이는 경우를 처음 보는 것 같아서 질문드려요.. 어떤 의미인가요? 어떨때 붙이는거고 어떨 때 붙이지 않는건가요.. 그리고 if (*(const unsigned char*)X > *(const unsigned char*)Y) return 1; if (*(const unsigned char*)X < *(const unsigned char*)Y) return -1; if (*(const unsigned char*)X == *(const unsigned char*)Y) return 0; 이거는 strcmp 함수 알아보다가 발굴해낸건데 *(const unsigned char*) 의 뜻을 모르겠네요. X는 당연히 비교인수 넣는 parameter구요., (const unsigned char)으로 casting해서 아스키코드로 전환하는 것 까진 아는데 왜 굳이 char* 에다 괄호 앞에다가도 *를 한지 모르겠네요. 이건 코딩스타일인가요? 코딩스타일이면 (const unsigned char*)*X 랑 똑같은 의미를 가진다고는 이해 할 수 있는데 굳이 casting해주는 곳 까지 에스테리크를 넣는 이유를 모르겠습니다.. 기초적인 질문 죄송합니다.. 아직 좀 헷갈리는 단계네요ㅜㅜ
- 미해결홍정모의 따라하며 배우는 C언어
이진수 변환예제 작성한 코드 질문
#include <stdio.h> #define NUM 10 void print_binary(unsigned long n); void print_binary_loop(unsigned long n); int main() { print_binary_loop(NUM); print_binary(NUM); printf("\n"); return 0; } void print_binary_loop(unsigned long n) { long arr[NUM]; int i = 0; while (1) { arr[i] = n % 2; n /= 2; if (n == 0) break; i++; } for (int j = 0; i >= j; i--) { printf("%d", arr[i]); } printf("\n"); } void print_binary(unsigned long n) { if (n != 0) print_binary(n / 2); if (n != 0) { printf("%d", n % 2); } } 이전 강의에서 배열을 교수님께서 조금 다뤄주신 것 같은데 제가 작성한 코드가 맞는지 궁금합니다. 이렇게 코드 짜면 혹시 문제가 있을까요? 실행이 되고 제가 발견할 수 있는 오류를 찾지 못하면 정답일까요? 굉장한 뿌듯함과 약간의 의구심으로 질문드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
자체적으로 strncat() 함수 구현 질문.
삭제된 글입니다
- 해결됨홍정모의 따라하며 배우는 C언어
오류가 왜 생기는지 도통 모르겠어요ㅠㅠ
#include <stdio.h> #include <stdlib.h> char get_choice(void); char get_first_char(void); int get_integer(void); void count(void); int main() { int user_choice; while ((user_choice = get_choice()) != 'q') { switch (user_choice) { case'a': printf("Avengers assembel\n"); break; case'b': putchar('\a'); break; case'c': count(); break; default: printf("Error with %d.\n", user_choice); exit(1); break; } } return 0; } char get_choice(void) { printf("Enter the letter of your choice:\n"); printf("a. avengers b. beep\n"); printf("c. count q. quit\n"); char c; while (1) { c = get_first_char(); if (c >= 'a' && c <= 'c') break; else if (c == 'q') break; else printf("Please try again.\n"); } return c; } char get_first_char(void) { char c; c = getchar(); while (getchar() != '\n') continue; return c; } int get_integer(void) { int i; while (scanf("%d", &i) != 1) { while (getchar() != '\n') continue; printf("Please try again.\n"); } return i; } void count(void) { printf("Enter an integer:\n"); int i = get_integer(); for (int j = 1; j <= i; j++) printf("%d\n", j); } 8.8 문제만들기 예제를 푸는데 count()함수를 실행시킬려고 c입력 -> 숫자 입력 -> c입력하면 get choice 함수안에 please try again이 나와요. 제가 원하는건 c입력 -> 숫자 입력-> c입력 ->숫자 입력인데 디버그하고 F10 누르면서 오류 찾을려고 용을 써도 F10누르면 생기는 화살표가 갑자기 없어지더라고요.ㅠㅠㅠㅠ 오류를 스스로 못찾으니 분한마음이 느껴지지만.. 흑흑 부탁드립니다.
- 미해결홍정모의 따라하며 배우는 C언어
맨 위에 scanf받고 gets가 실행 안되는 이유 질문
char name[128]; int result = scanf("%s", name); char words[STRLEN] = ""; gets(words); 1. 이렇게 됐을 때 에러뜨면서 컴파일 실행이 안되는데 이유가 뭔가요? 예전에 getchar 쓸 때도 scanf가 위에 있으면 컴파일 못 읽는 현상 나왔던 것 같은데.. 그냥 함수의 기능만 하는거면 상관없지 않나요? 뭔가 충돌이 되는건가요? 2. 그리고 buffer는 전 강의와 관련지었을 때 어느 메모리에 위치하고 있나요? TEXT Segment? gets(word)에서 word[5] 일때 helloo 를 입력하면 run-time error가 걸리는데 메모리 관점에서 권한을 주지 않은 곳을 접근하거나 읽기전용의 data를 수정하려드니 해킹하지말라고 운영체제가 차단시키는 걸로 인지하고 있습니다. 근데 gets는 buffer에 저장된 것들을 읽는 거니까 그럼 buffer는 TEXT Segment 또는 그 안의 read only data에 위치하는 건가 궁금하네요. 근데 쓰다보니 beffer는 소모성이라 읽고나면 날라가니까 text segment에 저장되어있지 않을 것이라고 생각은 드네요?
- 미해결홍정모의 따라하며 배우는 C언어
이 강의 듣는데 3시간 30분 걸림
최곱니다.
- 해결됨홍정모의 따라하며 배우는 C언어
11:47 4byte int 양수부분 오타 있습니다.
2,147438,647 -> 2,147483,647
- 해결됨홍정모의 따라하며 배우는 C언어
while 문의 expression 관련
while ((ch = getchar()) != '\n') 을 while ((ch = getchar() != '\n')) 로 잘못 작성 하였는데요, 프로그램은 실행 되었지만 숫자, 대소문자를 입력 후 변환되지 않고 끝나버렸습니다. 두번째 while 문과 같이 작성하고 debugging을 해보면 ch : '\0'에서 while 문 실행 후 ch: '\x01'로 입력을 받습니다. 두번째 while 문과 같이 작성하면 어떻게 작동 되는건지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
3차원 배열
int arr_3d[2][3][4] = { { {000,001,002,003}, {010,011,012,013}, {020,021,022,023}, }, { {100,101,102,103}, {110,111,112,113}, {120,121,122,123}, } }; 이거 큰묶음 2번째목록은 제대로 출력되는데 큰묶음 1번째에서 0 1 2 3 8 9 10 11 16 17 18 19 로 출력되네요 이유가 뭘까요