월 19,800원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결홍정모의 따라하며 배우는 C언어
main.o 파일을 생성하고 또 실행파일을 만드는 이유가 궁금합니다
main.c파일을 컴파일 해서 main.exe 파일이 만들어졌는데 이후에 main.o파일을 만들고 나서 왜 main.o에 대한 실행파일을 만드는 건지 궁금합니다gcc -c main.c는 컴파일만 하고 실행파일은 생성이 안 되니까 실행파일을 더 만드는 것까진 알겠는데 왜 obj파일을 또 컴파일 해서 obj파일로 실행파일을 만드는지가 궁금합니다main.c를 컴파일 => main.exemain.c의 obj 파일 생성 => main.omain.o를 컴파일 => exe_from_obj.exe이 중에 1,2번만 해도 obj파일과 exe파일이 생성된 것이니 더 생성해야될 파일이 없는 것이 아닌가요...?
- 미해결홍정모의 따라하며 배우는 C언어
재귀호출 질문입니다
n=4가 되었을 때이처럼 함수가 중첩된 상태라고 저는 이해했고, n=4가 되어 if문에 들어가지 않게 되자 원래 myfunc함수에서 if(n < 4)//stop condition my_func(n + 1); printf("Level %d, address of variable n = %p\n", n, &n);이 부분에 있는 myfunc때문에 이 밑에 있는 printf("Level %d, address of variable n = %p\n", n, &n); 가 4번 실행 못한 상태가 되었기 때문에 지금 기준 20, 21번 줄을 반복하면서(처음에 중첩되면서 못 돈 부분들을 돌고 있음) myfunc함수가 myfunc안에 없었다면 이런일도 없었겠지만 안에 있는 myfunc함수 때문에 출력이 못된 부분들이 마지막에 순차적으로 나오는 것이라고 이해하면 될까요?
- 미해결홍정모의 따라하며 배우는 C언어
조건문에 c == 'a' 대신에, c == 'a' | 'A' 를 하면 에러가 발생합니다
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int printfMenu() { printf("Enter the letter of your choice:\n"); printf("a. avengers "); printf("b. beep\n"); printf("c. count "); printf("d. quit\n"); } int selectA() { printf("Avengers assemble!\n"); } int selectB() { printf("\a"); } int selectC(){ int n; printf("Enter an integer:\n"); scanf("%d", &n); for (int i = 1; i <= n; i++) { printf("%d\n", i); } } int clearBuffer() { while (getchar() != '\n') continue; } int main() { char c; while (1) { printfMenu(); c = getchar(); printf("%c", c); if (c == 'a'|'A') { selectA(); } else if (c == 'b'|'B') { selectB(); } else if (c == 'c'|'C') { selectC(); } else if (c == 'd'|'D') { break; } else { printf("Wrong input. try again.\n"); } clearBuffer(); } return 0; }강의 전에 혼자 만들어본 코드인데요. 그 전에는 모든게 정상작동되었는데, 기존의 " if(c == 소문자알파벳)" 에서 " if(c == 소문자 | 대문자 )" 로 변경하면 scanf에 무엇을 입력하던지 if (c == 'a'|'A') 가 true가 되어 실행됩니다. c에 입력이 잘못들어가는지 F10으로 확인해보려고 printf("%c", c); 코드도 추가해서 찍어봤는데, c = 'B' 처럼 변수에 제대로 저장되어도, 조건문 if (c == 'a' | 'A')가 실행되네요. 제가 무엇을 잘못한건가요?? 어떻게 고칠수 있을까요 ?? 답변 부탁드리겠습니다 !
- 미해결홍정모의 따라하며 배우는 C언어
8.8 질문있습니다
밑 부분 getfirstchar 함수부분 질문입니다.while((ch = getchar()) != '\n') continue; ch = getchar(); while (getchar() != '\n') continue;윗 부분이 제가 한 것이고 밑 부분이 정답인데 제 것을 복사해서 정답예제에 바꿔 넣어서 하니 넘어가지 않고 try again부분이 계속 반복됩니다이 부분이 문제가 있는건 맞는데 왜 문제가 생기는지 정확하게 모르겠어요 ㅜㅜ
- 미해결홍정모의 따라하며 배우는 C언어
질문 두 가지가 있습니다
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void display(char cr, int lines, int width); int main() { char c; int rows, cols; // 종료를 깔끔하게 하지 못한다 // while(1) // { // scanf("%c %d %d", &c, &rows, &cols); // while(getchar() != '\n') continue; // display(c, rows, cols); // } printf("input one char and two int :\n"); while ((c = getchar()) != '\n') { scanf("%d %d", &rows, &cols); display(c, rows, cols); printf("input another character and two int : \n"); printf("press enter to quit.\n"); } return 0; } void display(char cr, int lines, int width) { for(int i = 0; i < lines; i++) { for(int j = 0; j < width; j++) { printf("%c",cr); } printf("\n"); } }첫 번째는 강의 5분쯤 밑에 코드로 내려와서 실행하시는데 처음에 * 3 5엔터 후 종료되는 것이 아닌 % 2 2를 이어서 하시는데 제 딴에는 똑같이 따라한 것 같은데 첫번째 엔터 후 종료가 되버립니다.두 번째는 밑에 display함수에서 저는 printf를 사용했고 선생님은 putchar을 사용하셨는데 제 생각에는 별다른 차이가 없을 것 같고 첫 번째 문제를 만나기 전까지는 결과가 이상이 없어 괜찮을 거 같은데 혹시나 해서 그냥 짧게 쓰고자 하는 목적인지 질문합니다
- 미해결홍정모의 따라하며 배우는 C언어
제가 짜본 코드로는 잘 안 나오는데 왜일까요
printf("Enter some text: "); while ((c = getchar()) != STOP) { n_char += 1; if ((c = getchar()) == ' ') n_word += 1; if ((c = getchar()) == '\n') n_line += 1; } printf("characters=%d, words=%d, lines=%d\n", n_char, n_word, n_line);디버깅을 찍어보는데 디버깅 과정 자체가 이해가 어려워서 어디가 문제인지 모르겠더라고요.빈칸이나 엔터가 있을 때마다 word와 line을 카운팅을 늘려주려고 했는데 출력값은 되게 다르더라고요. 마침표도 여러번 찍어야 루프에서 탈출하고뭐가 어떻게 문제인지 모르겠습니다
- 미해결홍정모의 따라하며 배우는 C언어
1.9강
따라했는데 다르게 나와요
- 해결됨홍정모의 따라하며 배우는 C언어
포인터 동적할당 sizeof()의 크기와 strlen()가 다른 부분
안녕하세요~ 강의 마지막 부분에 동적할당 관련하여 이해가 안되는 부분이 있어서 질문 드립니다.sizeof(str5)의 경우 메모리 크기가 4이고 strlen(str5)인 경우 5로 나오는데요. "Hello"는 5byte이고 sizeof(str5)은 4byte인데 str5 변수에 "Hello"가 어떻게 들어갈 수 있는지 궁금합니다
- 미해결홍정모의 따라하며 배우는 C언어
입력받는 함수 사용할때 디버거
예제 그대로 따라하고 실행하면서hello nice to meet youmy name isi love you.라고 입력했을땐 '.' 이 나올때까지 한번에 입력받는데디버거로 확인해 보려할땐한 줄씩 한줄씩 while문을 다 돌리고 나서 입력을 받더라고요.보기엔 한번에 입력받는 것 처럼 보이지만 사실은 줄바꿈이 입력될때마다 한줄씩 끊어서 입력을 받는 건가요??
- 미해결홍정모의 따라하며 배우는 C언어
메모리 레이아웃에서 스트림의 위치
fopen이 반환하는것은 파일구조체의 포인터입니다.이러한 fopen이 반환하는 파일구조체는 메모리 레이아웃에서 어디에 위치하고 있나요?fopen함수를 사용하면 생기는 파일 구조체를 파일스트림 이라고 이해하면 될까요?그리고 fclose를 사용하는 이유는, 파일이 다 읽히지 않았을 때 버퍼에 남아있는 데이터가 오류를 일으키지 않게 하기 위함이라고 하셨습니다. 그 이유 외에 메모리 누수를 방지하기 위함도 있나요?
- 미해결홍정모의 따라하며 배우는 C언어
질문! int와 main(), 그리고 return에 대해서
안녕하세요 c언어를 공부 중 인 학생입니다.일단 int main()은 '메인 함수가 프로그램 종료 시 return값을 정수형 으로 반환 받겠다.' 의 의미 인 건 알겠습니다. 그래서 main함수 앞에 정수형인 int 가 붙는 것 이고요. 그런데 여기서 return값에 대해 궁금한게 프로그램을 성공적으로 종료 시켰다 라는 의미로 값 0을 반환 하는데 굳이 반환 값이 꼭 0 이여야 하나 궁금합니다. 0이 아니여도 1, 4, 5, 7, 같은 다른 정수를 반환 시켜도 프로그램은 정상적으로 작동 하는 거 같은데 0과 다른 정수들의 차이점을 모르겠습니다. int main() 함수에서 return 값을 반환 시킬때 꼭 0을 쓰는 이유가 있나요?
- 미해결홍정모의 따라하며 배우는 C언어
컴파일 및 함수 관련 질문
안녕하세요. 컴파일 과정과 관련하여 잘 이해가 되지 않은 부분이 있어서 질문 드립니다. <질문1> 컴파일 관련 질문1) 컴파일 작업 중 전처리 단계에서는 include한 헤더파일의 내용 즉, 헤더파일에 저장된 함수 선언 부분을 소스파일로 복사붙여넣기 하는 과정이고, 헤더파일은 일반적은 함수의 선언만 되어 있기 때문에 함수가 호출될 때는 함수의 body가 있는 다른 실행파일과 연결하는 '링킹'과정이 필요하다. 라고 이해하였는데 제대로 이해하였나요? 즉, 전처리 단계는 함수를 선언하는 과정이라면, 함수 호출이 될 때, 함수의 body부분을 알 수 있고, 제대로 body 부분을 파악하기 위해서 '링킹'이 제대로 되는 것이 중요하다고 이해했습니다! 2) inline함수는 위의 일반적인 함수 호출과 달리, 주소에 접근하여 함수의 코드를 가져오는 것이 아니라 단순히 헤더파일에 있는 함수의 코드를 복사하여 main함수에 붙여넣는 구조인 것인가요? 그렇다면, 일반적인 함수 호출보다 상대적으로 더 빠르다고 볼 수 있을까요? 또한, inline함수는 함수의 주소를 모른다고 했는데, 그 이유가 무엇인지도 궁금합니다. <질문2> 함수 관련 질문함수 또한 포인터이기 때문에 함수가 호출되면, 함수가 가리키고 있는 주소에 접근하여 함수의 실행 코드를 실행한다고 하셨습니다. 예를 들어 sum함수를 호출한다고 할 때, a,b를 함수의 인자로 받게 되면, 변수 a,b를 통해서 접근할 수 있는 메모리에 들어있는 '값'과 함수 호출 종료 후 돌아올 주소값이 함수 실행 파일의 스택에 쌓이게 되고, 함수 실행 코드에서의 지역변수들이 그 위에 쌓이면서 스택 프레임이 생성되는 것인가요? 이러한 스택 프레임을 활용하여 code segment에 있는 함수 코드들이 실행되는 것인가요? 감사합니다!!!
- 미해결홍정모의 따라하며 배우는 C언어
포인터의 배열
int arr0[3] = {1, 2, 3};int arr1[3] = {4,5,6};int* parr[2] = {arr0,arr1}와 같이 포인터의 배열을 선언해준다는 가정 하에 이때 parr자체는 arr0[0]을 가리키는 것이 맞나요??
- 해결됨홍정모의 따라하며 배우는 C언어
초반 실습 오류
안녕하세요.몇 번이고 다시 실습 코드를 쳐봤지만 같은 오류가 생깁니다.원인이 무엇인지 구글링을 해봐도 잘 모르겠습니다.늘 좋은 강의 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
포인터와 배열
안녕하세요!! 설명해주신 포인터와 배열 개념을 이해하는 도중 혼동이 와 질문을 남깁니다. double nums[1.0,2.0,3.0,4.0];와 같이 배열을 선언한 뒤 double *ptr = nums와 같이 포인터 변수에 nums를 넣어주는 상황으로 가정해보겠습니다. const를 배열이나 포인터 앞에 붙이면 배열의 요소들을 변경할 수 없지만 ptr++과 같이 증감연산자는 사용이 가능하다고 설명을 해주신 부분에서 ptr++을 하면 그 값은 nums[1]이 되는 것은 이해가 갑니다. 하지만 ptr++을 해주고 난 뒤 ptr[2]를 하면 nums[3]의 값이 출력된다고 하셨습니다. 저는 ptr++이라는 값이 nums[1]을 가리키는 것은 히해했지만 ptr[2]라는 값이 왜 nums[2]가 아닌 nums[3]을 가리키는지 모르겠습니다. nums ptr 포인터 변수 자체가 ptr++을 해주게 되면 nums[1]이라는 값으로 초기화가 되고 인덱싱을 하려면 기존의 nums[0]이 nums[1]과 같은 위치가 되는 것인가요??
- 미해결홍정모의 따라하며 배우는 C언어
구조체 관련 질문
안녕하세요. 잘 이해가 되지 않은 부분이 있어서 질문 드립니다.<질문1>struct my_class{char* name;int score;} int main(){struct my_class student; student.name = (char*)malloc(sizeof(char) * 20 + 1);student.score == (int*)malloc(sizeof(int));scanf("%s %d", student.name, student.score) 이전에 구조체.멤버는 '주소'를 의미한다고 답변해주셨습니다. 근데 잘 이해가 되지 않은 부분이위의 코드처럼 score에 대한 값을 받아올 때는 주소연산자(&)을 사용하지 않으면, 오류가 발생합니다. 구조체. 멤버가 배열의 경우에는 '주소'를 의미하고, 변수나 상수 등을 의미할 때는 '값'을 지칭한다고 이해해도 될까요? <질문2>구조체에서 문자열을 가진 변수를 선언할 때, 포인터보다 배열을 선호 한다고 하셨는데 그 이유가 정확하게 이해가 되지 않아서 질문 드립니다.1)포인터를 사용하게 되면, 포인터도 메모리를 차지하고, 동적할당 받은 메모리 영역도 있기 때문에 배열을 사용했을 경우보다 메모리 측면에서 비효율적이기 때문에 배열을 선호한다고 이해하면 될까요? 2)소스코드에 직접 문자열을 입력하는 경우에는 해당 문자열이 메모리레이아웃의 text segment에 저장되어, 읽기 전용 모드이기 때문에 수정을 할 수 없다. 하지만, 할당 받은 메모리에 직접 입력을 받는 경우에는 힙 영역에 해당 데이터가 저장되기 때문에 수정 등이 가능하다. 라고 이해했는데 제대로 이해한 것인지 궁금합니다. 즉, <질문1>의 예시 코드처럼 name에 대한 메모리를 할당 받았을 때, 콘솔창에서 입력 받은 값은 힙 영역에 저장되고, 구조체 변수 student는 스택에 저장되어 힙에 할당된 name이 할당 받은 메모리를 가리키고 있는 것이 맞는지 궁금합니다! 감사합니다.
- 미해결홍정모의 따라하며 배우는 C언어
result 이름
int compute_pow에서의 result와int main에서의 result는 서로 다른 메모리인데 우연히 이름이 같은 것이라고 생각하면 될까요??서로 다른 이름으로 만들고 작동해보고 잘 되는 것까지 확인했습니다.
- 미해결홍정모의 따라하며 배우는 C언어
3.12강 부동소수점 한계에서 왜 %e를 쓰나요?
3.12강 강의 후반부에서 underflow를 설명하실 때 min값을 출력하려고 할 때 max를 출력할때와 다르게(max를 출력할 땐 printf에서 %f를 쓰셨는데) %e로 지정을 하셨습니다.제가 %f로 출력할 땐 콘솔창에 값이 제대로 표현되지 않았는데 %e로 했을땐 제대로 표현되는 것을 볼 수 있었습니다. 혹시 이유를 알 수 있을까요?제가 생각한 이유는 min값은 너무 작은 값이라서 f형으로 표현하기엔 너무 작아서 지수식 표현법을 사용해야 정밀도를 잃지 않고 표현한 것이라 생각이 드는데 맞을까요? //underflow float min = 1.401298464e-45F; printf("%e\n", min); // %f가 아니라 %e로 표현한다. min = min / 100.0f; printf("%e\n\n", min); //underflow가 발생해서 숫자가 날아간다.
- 미해결홍정모의 따라하며 배우는 C언어
주소값 크기에 대해서 질문있습니다.
int a;printf("%d",sizeof(&a)); 왜 결과값이 8byte가 나오는지 궁금합니다.
- 미해결홍정모의 따라하며 배우는 C언어
4.9 질문이 있습니다.
강의에서는 잘못 출력되는 예제중 첫번쨰 에서 n3가 1024가 아닌 다른 숫자가 나오는데요 (이 오류의 원인은 이해했습니다)하지만 제가 따라하니 1024로 나옵니다.혹시나 해서 x86으로 하니 강의처럼 오류가 뜨는데요이전에 포인터의 크기와 관련해서 32비트와 64비트를 확인해보라는 답글을 주셔서 이 부분은 이해했는데 지금 부분은 왜 다른지 이해가 가지 않습니다. 답변 부탁드립니다.