월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
str[] or str
void print_centered_str(char str[]) 여기서 char str이랑 char str[] 과 어떤 차이가 있나요? char str 을 실행해봤는데 원하는 출력이 나오지 않았습니다. 왜 다르게 나오는지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
강의 7:35
stop을 입력하셨을 때 문제가 발생한 이유가 else에서 입력버퍼를 지워주지를 않아서 첫 번째 c = 's'가 되서 else문 실행 (입력 버퍼에 s는 지워지고 't' 'o' 'p' '\n'만 남음) 두 번째 c = 't'이므로 else문 실행 (입력 버퍼에 t는 지워지고 'o' 'p' '\n'만 남음) 이런식으로 진행되서 cmd창에 Please input y or n Current count is 0.Continue?(y/n) 이 두 줄이 버퍼의 수?(s, t, o, p, \n)만큼 총 5번 반복된거로 이해하면 되나요?
- 미해결홍정모의 따라하며 배우는 C언어
강의 4:35초
while (getchar() ! = '\n') continue; 이 식이 같은 줄에 입력한 앞에 한글자 빼고 줄바꿈이 나오기 전까지 무시하겠다. 라고 말씀하셨는데 그 과정이 어떻게 이루어지는지 모르겠습니다. 왜 한 글자만 빠지고 그 다음부터 무시하겠다는 건가요?
- 미해결홍정모의 따라하며 배우는 C언어
함수호출위치 및 메모리
강의를 보는 중간에 항상 함수 호출은 main 함수에서 하던데 비주얼스튜디오에서 main함수위에 하면 오류가 뜨더라고요예를들어 #include <stdio.h> int func(int num) { int result = num + 3; printf("%d", result); return result; } func(3); void main(void) { } 이렇게 변수처럼 전역변수자리에 함수호출은 허용안되는 건가요? 만약에 된다고 하면 항상 main함수부터 실행한다고 했는데 어떻게 되는건가요?또한 전역변수처럼 메모리에 끝까지 남아있는건가요?
- 미해결홍정모의 따라하며 배우는 C언어
비주얼 스튜디오 상에서 strlen 함수 사용시 경고 C6001이 뜨는 이유가 궁금합니다.
#include <stdio.h> #include <string.h> //strlen and more int main() { char str1[100] = "Hello"; char str2[] = "Hello"; char str3[100] = "\0"; char str4[100] = "\n"; printf("%zu %zu\n", sizeof(str1), strlen(str1)); //C6001 printf("%zu %zu\n", sizeof(str2), strlen(str2)); printf("%zu %zu\n", sizeof(str3), strlen(str3));//C6001 printf("%zu %zu\n", sizeof(str4), strlen(str4));//C6001 return 0; } 4.4 strlen() 함수 0:48초 부분인데 강의에서는 아무런 워닝이 뜨지 않지만 제 비주얼 스튜디오 상에서는 str2를 제외한 str1, str3, str4에서 워닝 C6001이 발생합니다. Using uninitialized memory 'str1' Using uninitialized memory 'str3' Using uninitialized memory 'str4' 근데 온라인 gcc 컴파일러에서는 아무런 워닝도 뜨지 않고, 강의 상에서의 비주얼 스튜디오에서도 아무런 워닝이 생기지 않아서 제 생각으로는 아마도 비주얼 스튜디오가 업데이트 되면서 생긴 문제 같은데 왜 이런지 이유를 알 수 있을까요? 현재 Microsoft Visual Studio Community 2019 Version 16.11.5을 사용하고 있습니다.
- 미해결홍정모의 따라하며 배우는 C언어
주소값 출력과 관련하여 질문있습니다
int *a_ptr = &a; 1.printf(" %p\n", *a_ptr); 2.printf(" %p\n", &a_ptr); 3.printf(" %p\n", a_ptr); 여기서 2번은 a_ptr의 주소값을 출력하는 거고 3번은 a의 주소값을 출력해주는 건데 1번을 뭘 출력해주는 건지 궁금합니다. 실제로 확인해보니 모두 다른 값이 나와서요. 1번과 2번이 같은 값이 나올 줄 알았는데 다른 값이 나오네요.
- 미해결홍정모의 따라하며 배우는 C언어
dereferenced 이중포인터의 연산에 질문
void prointIntArray(double** arr, int n) { for (int i = 0; i < n; ++i) printf("%p \n", *arr + i); printf("\n"); } int main() { double* arr_i[] = { (double[]) { 0,1,2,3 }, (double[]) { 4,5,6,7,8 }, (double[]) { 9,10,11 } }; int n_i = sizeof(arr_i) / sizeof(arr_i[0]); prointIntArray(arr_i, n_i); return 0; } /* Output 006FFA34 // (double) 크기만큼 이동함을 확인할 수 있습니다. 006FFA3C // arr은 이중포인터니 *arr도 포인터 아닌가요? 006FFA44 // 이 값은 포인터 크기만큼 움직여야 할 것 같습니다. */ void printStrLiteral(char** arr, int n) { for (int i = 0; i < n; ++i) printf("%p \n", *arr + i ); printf("\n"); } int main() { char* arr[] = { "Cherry", "AppleBee", "Pineappple", "Apple", "Orange" }; int n = sizeof(arr) / sizeof(arr[0]); printStrLiteral(arr, 5); } /* Output 00AC7E40 // 이중포인터를 dereference하여도 여전히 포인터입니다. 00AC7E41 // 포인터 + 1 연산을 했을 때 4byte를 이동해야할 것 같습니다. 00AC7E42 // base type 만큼 움직이고 있습니다. 00AC7E43 00AC7E44 */ 이중 포인터를 derefrence해도 pointer입니다. pointer 크기만큼 이동해야할 거 같은데 base type 크기만큼 이동하는 이유가 있을까요?
- 미해결홍정모의 따라하며 배우는 C언어
getchar
while (getchar() != '\n') continue; 이게 어떻게 첫 글자만 읽는다는 의미인지 모르겠습니다 ㅠ
- 미해결홍정모의 따라하며 배우는 C언어
컴파일과 빌드에 대해 질문있습니다.
안녕하세요. 앞에 있는 컴파일러 강좌를 다시 듣고와도 잘 모르겠는 부분이 있어서 질문 드립니다. 소스파일 하나당 obj파일이 하나 만들어지니까 함수의 본체를 없앤 소스코드를 빌드 할 때도 obj파일이 하나, 함수의 본체가 제대로 있는 소스 코드를 빌드 할 때도 obj 파일이 하나 만들어지잖아요. 이 때 본체를 없앤 소스코드를 빌드할 때 링킹 단계에서 오류가 난다는 건 obj 파일에 본체가 없다는 걸 링킹 단계에서 안다는 걸로 이해하는 게 맞을까요? 그러니까 링킹 단계에서 쓰여진 함수들의 참조를 가져오려고 라이브러리 파일도 가져오고 하는데 여기서는 print_multiple_chars라는 함수의 참조를 가져올 수 없어서 오류가 발생한다고 이해하는 게 맞을까요? 그러면 컴파일 할 때는 로직만 보고 신경안쓰고 obj파일을 만들었더라도 함수의 본체가 제대로 있는 소스코드를 빌드할 때 본체가 다른 obj파일에 있는 게 아니라 컴파일 할 때 만들어진 obj파일에 있는 게 맞는 거죠? 읽어주셔서 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
1:00 알파벳 예제 직접 풀어봤는데 의문점이 있습니다.
int main() { int i = 'A'; int m = 1; int n = 0; for (; m <= 5 ; m++) { for (; n <= 10 ; n++) { printf("%c ", i + n); } printf("\n"); } return 0; } 답안을 보기 전에 임의로 만들어 보았습니다. 좀 더럽게 만들긴 했는데 A ~ K까지 첫 줄은 잘 출력이 되는데 2 ~ 5열까지는 출력이 되지가 않았습니다. 두번째 루프는 작동을 하는데 첫번째 루프가 작동하질 않습니다. 첫번째 루프를 답안과 비교를 해봐도 제가 만든 첫번째 루프에서 어디가 문제인지를 모르겠습니다. 어디에서 문제가 생긴걸까요?
- 미해결홍정모의 따라하며 배우는 C언어
printf의 반환값
scanf 함수는 입력된 수에 따라 반환값이 결정되는 것으로 알고 있습니다. printf 함수의 반환값은 무었인가요?
- 미해결홍정모의 따라하며 배우는 C언어
64bit 환경에서 stack 에 대한 질문 보고 다시 질문드립니다.
안녕하세요, 저 역시 x64 환경이어서 이번 강의 질문 내용에서 바로 아래에 다른 분이 올려주신 질문과 상세한 답변 감사하게 보았습니다. 거기서 생긴 다른 의문이 있는데요, 64-bit환경에서는 8byte씩 읽는 것이라면,int나 long과 같은 4byte 크기의 자료형도 실제로는 8byte를 차지하고 있는 것인가요??기본값이 8byte일 때 그보다 적은 크기만 따로 떼어내어 읽는 것이 가능한지 질문드립니다. 감사합니다..!
- 미해결홍정모의 따라하며 배우는 C언어
%lld 질문드립니다.
안녕하세요, 저는 맥북으로 vscode를 사용하여 코딩 중에 있습니다. 강의에 보면 %lld 형식지정자를 사용할 때, INT_MAX + 1을 사용하여 값을 받도록 하는데요, 저같은 경우 INT_MAX + 1이라고 넣으면 overflow가 발생하고 INT_MAX + 1LL이라고 반드시 입력을 해줘야지만 제대로 된 값이 출력됩니다. 보통 의문점이 생기면 구글링 통해서 해결하곤 하는데 이건 어떻게 검색해야 할지 감이 안 잡히네요 ㅜㅜ 아무리 생각해봐도 왜 이런 문제가 발생하는지 잘 모르겠습니다. ------------------------------------------------- 좀더 살펴보았는데요,,, problems에 경고문이 뜨네요. "format specifies type 'long long' but the argument has type 'int'" 그니까, argument 부분에서 이미 overflow가 발생했기 때문에 값이 -2147483648로 받아지는 것 같아요.그런데 이 경고문을 바탕으로 보았을 때는 강의 예시에서는 어떻게 overflow가 발생하지 않을 수 있는지 궁금합니다... go to definition에서 보면 강의에 있는 limit.h 라이브러리가 제 것과 다른데, 그 문제일 수도 있겠다 싶긴 한데요... 제 라이브러리에서는 INT_MAX가 int로 되어있고 선생님께서 사용하시는 라이브러리에는 long long으로 되어 있다든지.. 교수님의 라이브러리에는 #define처리가 되어 있었던 것 같은데 저는 그렇게 안 되어 있거든요. 이게 좀 실마리가 될 수 있을지 모르겠습니다.
- 미해결홍정모의 따라하며 배우는 C언어
실무에서 맥북으로 c++,c 에디터 뭐쓰는게 좋나요?
선생님께서는 비쥬얼스튜디오가 제일 좋다고 그랬는데 저는 처음에 공부목적으로 비쥬얼코드로 GCC컴파일러로 공부를 했었는데 이제 맥북을 사용하게되서 비쥬얼스튜디오를 쓸수가없어요 에디터로 VIM 이랑 비쥬얼스튜디오 코드 이렇게 생각했었는데 vim은 사용하기도어렵고 몇가지 단점이있다그랬던거같아요 c++로 콘솔게임 개발을 위해서 맥북에서는 어떤 에디터를 사용하는게 제일 나을까요? 이문제로 많이 알아보고 고민했는데 해결이안됬어요
- 미해결홍정모의 따라하며 배우는 C언어
Build 오류
위 강의와 동일하게 코딩한 후 x86에서 build하면 아래와 같은 문구가 뜨면서 build가 되지 않습니다. Unable to start program 'c:\users\...' c:\users\... is not a valid Win32 application. x64에서는 정상적으로 빌드가 됩니다. 어떤 오류인지 알려주실 수 있을까요?
- 미해결홍정모의 따라하며 배우는 C언어
자료형 질문있습니다.
강의에서 input의 자료형으로 long을 사용하셨는데 int와 long의 데이터 범위가 같은 것으로 알고있는데 혹시 차이가 있나요? (signed)long(int)로 알고 있는데 제가 잘못 알고 있는 건가요?
- 미해결홍정모의 따라하며 배우는 C언어
8.5강 2:58초가 잘 이해되지 않습니다.
버퍼에 \n이 남아있는 거는 이해가 됩니다. 그런데 그렇기 때문에 다음 입력 받을 때 %c에 \n이 입력 되는데 그러면 프로그램이 종료되어야 한다고 생각이 들어서요. 실제로 제가 선생님과 똑같이 쓴 코드로 실행시키면 c == \n이 되어 프로그램이 종료됩니다. 그런데 강의에서는 b 1 2를 입력했을 때 \n이 여러번 반복된 후에 제대로 실행이 되더라고요. 그렇게 되는 이유를 잘 모르겠습니다. ㅠㅠ
- 미해결홍정모의 따라하며 배우는 C언어
항상 값이 0 이 나옵니다.
아래 작성한 코드입니다. 환율 변수명 rate로 초기화 하고 그곳에 1500을 넣었습니다. 그리고 won 입력후 rate와 won을 곱하였는데 항상 "0"이 나옵니다. 교수님 도와주세요. (혼자 디버거를 찍어 보아도 won이라는 변수에 값이 입력되질 않습니다.) #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main() { int won = 0; int dollar = 0; int rate = 0; rate = 1500; printf("Input won\n"); scanf("won is %d\n", &won); dollar = won * rate; printf("Dollar is %d\n", dollar); return 0; }
- 해결됨홍정모의 따라하며 배우는 C언어
dummy 유무의 차이가 뭔지 모르겠습니다
안녕하세요. 디버깅할 때 10:23 설명과 달리 dummy가 있을 때도 dummy에서 멈추지 않고 넘어가서 결국 같은 결과인 걸로 보입니다. 뭐가 다른 건가요?
- 미해결홍정모의 따라하며 배우는 C언어
7.11 예제 질문
평균은 나오는데 최소값, 최대값 함수를 작동하는 과정에서 num 값이 변하는데 무슨 이유일까요? #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <ctype.h> #include <stdbool.h> double min(num, pre_num) { return pre_num >= num ? num : pre_num; } double max(num, pre_num) { return pre_num >= num ? pre_num : num; } int main(void) { double average = 0.0; double sum = 0.0; double pre_num = 0.0; double max_num = 0.0; double min_num = 0.0; double i = 0.0; double num = 0.0; bool consider_num = 1; while (true) { consider_num = scanf("%lf", &num); if (consider_num == 0) break; if (i >= 1) { max_num = max(num, pre_num); min_num = min(num, pre_num); } sum += num; pre_num = num; i += 1.0; } average = sum / i; printf("%lf, %lf, %lf", average, min_num, max_num); return 0; }