월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨홍정모의 따라하며 배우는 C언어
[(15. Bit Manipulation) - 8. RGBA 색상 비트 마스크 연습문제] Alpha의 값이 255일 때, float로 왜 1.0인가요?
강의 2분 50초부터 2분 55초 구간에 'float로 변환하면, 1.0이 될겁니다.'라고 하셨습니다. 각각의 color channel에 대한 data type은 unsigned char이므로, 8 bits의 size를 가지고 있습니다. 그러므로 만약 '255'라는 10진수를 저장한다면, binary data는 1111 1111 입니다. 그런데 이 binary data가, 어떻게 float type의 '1.0'을 의미하는 것인지 모르겠습니다. 32 bits size를 가지는 float type으로 casting하면, 0000 .... 1111 1111 (32bits) 이므로 '255.0'이 나옵니다. 혹시 8-bit 부동소수점 숫자로 표현한다는 것을 말씀하신것인가 싶어서, 1111 1111 라는 binary data를 8-bit 부동소수점 수로 직접 계산해보니 -1 * 16 * 1.9375 = -31이 나옵니다. (Format : Sign 1 bit, Exponent 3 bits, Fraction 4 bits) 어떤 과정으로 인해서 alpha channel의 data인 '255', 즉 binary data 1111 1111 이 '1.0'이되는 것인가요?
- 미해결홍정모의 따라하며 배우는 C언어
"" 와 ''의 차이
char a = 'A'; 와 char a = "A";의 아스키 코드 값이 달라지는 것 같이 보입니다. 이러한 이유가 무엇이고 어떤 식으로 ''와 ""를 분리해서 써야하는지 알려주시면 감사할 것 같습니다!!
- 해결됨홍정모의 따라하며 배우는 C언어
프로그램이 파일의 EOF를 어떻게 찾나요?
챕터 8.9 10:30 안녕하세요~ 강의 잘 듣고 있는 중에 궁금한게 있어서 질문합니다! while (( c = getc(file)) != EOF) 17번째 줄 코드인데요. 코드 뜻은 파일 내용 중 EOF를 만날 때까지 문자 한 개씩 변수 c에 대입이잖아요? 근데 텍스트 파일에 EOF를 적어주지도 않았고, 보이지도 않는데 어떻게 프로그램이 EOF를 인식할 수 있는건가요?
- 미해결홍정모의 따라하며 배우는 C언어
The argument has type 'unsigned long'
안녕하세요! 맥 터미널로 공부하고 있는 학생입니다! 다름이 아니라 sizeof 연산자 사용 부분에서 printf("%u", sizeof(unsigned int)); 를 출력하면 format specifies type 'unsigned int' but the argument has type 'unsigned long'라는 오류 메시지가 뜹니다! 바쁘시겠지만 잘부탁드리겠습니다!
- 미해결홍정모의 따라하며 배우는 C언어
strlen()에서 %zu 사용
strlen이나 sizeof 쓸 때 크기나 길이를 나타내는 숫자들이기에 %zu말고 %d나 %i로 사용해도 되나요?
- 미해결홍정모의 따라하며 배우는 C언어
buffer와 file stream에 대한 질문
안녕하세요! scanf의 경우 입력 buffer에서 하나씩 읽으며, 읽은 문자가 buffer에서 빠져나가는데, fscanf의 경우도 마찬가지로 주어진 format을 따라 하나씩 읽으며 file stream에서 빠져나가게 되나요??
- 미해결홍정모의 따라하며 배우는 C언어
강의 중에
7:15 쯤에 float max = 3.402823466e+38f; max = max * 100.0f; 제가 초보라서 이해를 못 했는 것 같은데 애초에 이게 성립이 되나요? max = max * 100.0f; 는 곧 3.402823466e+38f = 3.402823466e+38f * 100.0f; 와 같은 게 아닌가 싶어서...
- 미해결홍정모의 따라하며 배우는 C언어
3.4
#include <stdio.h> int main() { float won = 0.0f; float dollar = 0.0f; dollar = won * 0.00089f;//플러트 형 리터럴이된다. printf("Input Won\n"); scanf("%f\n", &won); printf("Dollor = %f\n", dollar); return 0; } 강의 3.4에서 달러 계산 법에서 숫자를 두번 입력해야지만 결과값이 나오는데 이유가 뭘까요? 그리고 scanf("%f\n", &won);가 밑줄이 쳐져있는 이유가 뭘까요?
- 미해결홍정모의 따라하며 배우는 C언어
while문
강의 6.1에서 처음스스로작성해보라할때 while문 작성하다 scanf(" %c", &n);로작성했다가 합이 이상해서 (합이상한건 왜그런지 해결됬습니다) 따로다른코드작성해보다 질문합니다 첫번째코드에서 만약 -100을입력하면 45가나오고 2번째 while문이 있는코드에서는 -100을입력하면 45 49 48 48 나오는데 첫번째코드는 -값만나오고 while문으로작성한코드는 -값 1값 0값 0값 이렇게다 따로 나오는 이유는 뭔가요? #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int i = 1; scanf("%c", &i); printf("%d", i); return 0; } #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int i = 1; while(1) { scanf(" %c", &i); printf("%d\n", i); } return 0; }
- 미해결홍정모의 따라하며 배우는 C언어
강의 4.3 질문입니다.
강의 4.3 12분 40초경 비쥬얼스튜디오 코드 20번째줄에 형식지정자를 굳이 %hhi로 쓰는 이유가 궁금합니다. %i로 해도 똑같이 정수로 잘 나오긴 하는데 그냥 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
scanf 다음에 getchar로 버퍼 clear 하는 부분에서 enter만 입력하면
강의 11:11 에, printf("Input the price.\n>>"); int flag = scanf("%f", &library[count].price); while (getchar() != '\n') continue; 요 부분에서, 코드를 실행할때 위에서 book title과 author를 집어넣은 다음에, price를 입력할때 아무것도 입력하지 않고 enter만 입력하면 while문에 갇히는? 현상이 발생합니다. 물론 다른 입력을 한다음에 엔터를 치면 정상적으로 다음으로 돌아가는데 아무 내용 없이 enter만 치면 계속해서 while문에 머무른데 이해가 가지 않네요. enter만 쳐도 \n이 버퍼를 통해 전송되니 while문 조건에 맞지 않아 빠져나와야 정상인거 같은데... 왜 그런가요?
- 미해결홍정모의 따라하며 배우는 C언어
4.2 sizeof연산자 강의 질문입니다.
10분 21초에 size of pointer = 8 bytes 가 나오는데 어떤게 문제일까요? 다 그대로 타입핑 했는데 계속 8바이트라고 나옵니다..
- 미해결홍정모의 따라하며 배우는 C언어
질문
(5:24) 강의에서는 int32_t 의 형식지정자를 모른다 가정하고 설명하셨는데. 정말 형식지정자를 모른다거나 어떻게 할지 애매할 때가 정확히 어떤 경우가 있나요?
- 미해결홍정모의 따라하며 배우는 C언어
배열, 디버거 오류 질문
안녕하세요 선생님 공부하다가 궁금한 점이 있어 질문드립니다 name[]처럼 변수뒤에 []을 붙이면 그때마다 알아서 메모리를 새로 지정해주지 않을까 생각했어요 그래서 scanf로 문자열 입력을 받으면 메모리도 그에 맞춰서 정해질 거라 생각했는데 sizeof에서 알려준 메모리크기가 6인걸 보아 초기화했던 Hello의 문자열 크기만큼 지정이 된 것 같더라구요 여기서 어떻게 Strawberry가 짤리지 않고 그대로 출력되었는지 궁금합니다 그리고.. 디버거를 끝낼 때마다 계속 오류가 뜨는데 이걸 어떻게 해결해야할지 모르겠어요 ㅠㅠ 비주얼 스튜디오를 재설치해도 이렇게 뜨는데 해결방법이 있을까요?
- 해결됨홍정모의 따라하며 배우는 C언어
[(14. 구조체) - 9.구조체와 할당 메모리] - scanf()와 malloc()의 실행 순서에 따른 Heap Corruption Detected 오류
[강의 화면 사이드에서 이 질문을 보시는 분들은 [여기 (클릭하면 현재 강의 화면 페이지에서 이동하므로 주의)]서 보시면 따배씨 질문 페이지에서 조금 더 큰 화면으로 보실 수 있습니다.] 안녕하세요. 해당 강의에서 연습 문제를 직접 만들어보던 중에 getintfo()함수에서 runtime error가 발생하여 질문 드립니다. scanf() code line이 malloc()보다 먼저 실행되어야, 동적 할당 메모리를 해제할 때, runtime error가 발생하지 않는데 왜 그런 것인지 궁금합니다. 우선 제가 처음에 만들고나서 runtime error 발생 지점을 확인하기 위해 만든 code는 아래와 같습니다. getinfo() 함수 부분을 보시면, malloc()으로 동적 메모리 할당을 먼저 받은 다음에, scanf()함수로 char buffer[SLEN]에 입력을 받도록 했었습니다. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> // malloc(), free() #include <string.h> // strlen(), strcpy() #define SLEN 81 struct namect { char* fname; // Use malloc() char* lname; // Use malloc() int letters; }; void getinfo(struct namect*); // Allocate memory void makeinfo(struct namect*); void showinfo(const struct namect*); void cleanup(struct namect*); // Free memory when it is done int main() { struct namect person; getinfo(&person); makeinfo(&person); showinfo(&person); cleanup(&person); return 0; } void getinfo(struct namect* ptr_nct) { char buffer[SLEN] = { 0, }; int flag = 0; ptr_nct->fname = (char*)malloc(strlen(buffer) + 1); // Dynamic memory allocation for pointer 'fname' if (ptr_nct->fname != NULL) { printf("\nDynamic memory allocation for 'fname' is completed.\n"); printf("Please enter your first name.\n>> "); flag = scanf("%[^\n]%*c", buffer); // Taking string input into 'buffer' strcpy(ptr_nct->fname, buffer); // Copy of string by pointer from 'buffer' to 'fname` } else printf("\nDynamic memory allocation for 'fname' is NOT completed.\n"); ptr_nct->lname = (char*)malloc(strlen(buffer) + 1); // Dynamic memory allocation for pointer 'lname' if (ptr_nct->lname != NULL) { printf("\nDynamic memory allocation for 'lname' is completed.\n"); printf("Please enter your last name.\n>> "); flag = scanf("%[^\n]%*c", buffer); // Taking string input into 'buffer' strcpy(ptr_nct->lname, buffer); // Copy of string by pointer from 'buffer' to 'lname` } else printf("\nDynamic memory allocation for 'lname' is NOT completed.\n"); } void makeinfo(struct namect* ptr_nct) { ptr_nct->letters = strlen(ptr_nct->fname) + strlen(ptr_nct->lname); } void showinfo(const struct namect* ptr_nct) { printf("%s %s, your name contains %d letters.\n", ptr_nct->fname, ptr_nct->lname, ptr_nct->letters); } void cleanup(struct namect* ptr_nct) { // Deallocation of dynamically allocated memories printf("\nTime to free the allocated memory for 'fname'\n"); free(ptr_nct->fname); // Runtime error occurs in Visual Studio printf("Deallocation for 'fname' is completed!\n"); printf("\nTime to free the allocated memory for 'lname'\n"); free(ptr_nct->lname); // Runtime error occurs in Visual Studio printf("Deallocation for 'lname' is completed!\n"); } 실행해보니, Heap Corruption Detected라는 error가 발생했습니다. 우선 어떤 code line에서 error가 발생한 것인지 확인해보기 위해, debugger로 line마다 확인해봤습니다. cleanup()함수의 free()를 실행할 때, error가 발생하는 것을 확인했습니다. 그렇다면, 동적 메모리 할당은 정상적으로 수행되었는데, 해제를 할 때 문제가 발생한 것이라고 판단했습니다. Google에 해당 error를 검색해보면, 이 Error가 발생하는 것에는 아래의 이유가 있다고 합니다. 메모리 할당이 되지 않은 포인터(NULL Pointer)에 값을 넣음 할당치를 초과하여 데이터가 입력됨 그런데, 제 경우 분명히 정상적으로 동적 할당을 먼저 받았으므로, fname과 lname을 입력할 수 있었습니다. 혹시라도 동적할당이 되지 않았는지, 체크하기 위해 동적 할당이 완료되었다는 메세지를 출력하도록 했습니다. 그리고 제가 입력한 string은 buffer + 1의 size인 82 bytes를 초과하지도 않았습니다. 도대체 왜 메모리 해제에서 문제가 발생하는지 고민하다가, 다른 compiler에서도 작동하는지 확인해보기 위해 GCC Compiler를 사용하도록 설정한 VS Code와, Online C Compiler에서 시도해봤습니다. VS Code에서는 동적 할당 메모리가 해제되면서 프로그램이 정상적으로 종료됩니다. Online C Compiler에서도 프로그램이 정상적으로 작동합니다. 하지만 Visual Studio에서 실행해보면, free()에서 더 이상 진행되지 않고, error가 발생한 것을 재차 확인했습니다. 그러다가buffer에 입력을 받는 scanf()의 code line이 malloc()보다 먼저 실행되도록 수정해봤습니다. 정상적으로 작동하는 것을 확인했습니다. Q. 왜 scanf() code line이 malloc()보다 먼저 실행되어야, 동적 할당 메모리를 해제할 때, 문제가 없는 것인가요??
- 미해결홍정모의 따라하며 배우는 C언어
동적 메모리 할당에 대한 질문입니다
ptr값이 free(ptr) 실행하기 전과 후 똑같다는 것은 이해되었으나 왜 *ptr 값이 free(ptr) 실행하기 전과 후 똑같은지 모르겠습니다 ㅠㅠ free 함수는 내가 할당한 메모리 공간을 해제해주는 것인데 메모리를 해제하게 되면 할당된 메모리 안의 값들도 같이 사라져서 free(ptr) 실핼 후 *ptr 값은 아무것도 없어야 하는거 아닌가요..?ㅠ
- 미해결홍정모의 따라하며 배우는 C언어
함수 선언과 정의를 분할
함수를 선언과 정의를 분할 하는 과정에서, (강의 12:45) 제가 연습을 해봤더니 사진(첨부한 사진)과 같이 위쪽 라이브러리 함수가 있는 곳에 헤더파일이 생기고, (강의 12:45)화면 노란색부분 우측 상단에 "lexture2.c"가 띄워져 있는데 저는(첨부한 사진) "--.h" 와 같이 나옵니다. 제가 어떤 부분에서 잘못 하고있는지 알고 싶습니다. 감사합니다.
- 해결됨홍정모의 따라하며 배우는 C언어
bool even이 무슨 값을 입력해도 if문 진입시 false로 바뀝니다...
10을 입력하고 true값이 if로 들어가자마자 false로 바뀝니다...
- 미해결홍정모의 따라하며 배우는 C언어
공부를 진행하는데 딜레마에 빠집니다.
강의를 정말 열심히 보고있습니다. 다른 분들은 다들 어떻게 진행되는지는 모르겠지만... 매 연습문제마다 제대로 풀어본적이 없는 것 같습니다. 정답을 본 후 혼자 한글파일에 따로 정리해서 분석도 해보고 왜 이렇게 나왔을까에 대한 고찰도 해보고 하는데 점점 낯설게 느껴지는 것같아서 음... 박탈감? 이 조금 드는 것 같습니다. 커뮤니티 보면 다들 코드도 잘짜시고 이해도 잘하시는거 같은데 제가 어려워 하는건지... 스스로 코드를 짜봐도 안되는게 당연한건지.. 참 어렵습니다. 변수선언 부터 프로토타입 쓰는것도 낯설기만하는데 이대로 계속 진행하는게 맞을까요? 아니면.. 다시 뒤로 돌아가서 강의를 한번 더듣는게 나을까요 ㅠ.ㅠ 참 어렵습니다.
- 미해결홍정모의 따라하며 배우는 C언어
char str1[10]에 10글자 이상 입력 시 뜨는 한자
char str1[10]에 10글자 이상을 입력해보았습니다. 아래 출력된 한자도 메모리에 포함되는 것일까요? 왜 한자가 뜨게 되는건가요~?