묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 C언어
result 선언 질문
6.18 강의 중 3분 25초에 int result 를 1로 초기화 하셨는데, 강의에서 나온 코드와 똑같이 만들고 result를 0으로 초기화 하여 빌드했을때는 오류가 났지만 1로 초기화 했을 때에는 컴파일에 성공하였습니다.왜 result를 1로만 초기화 했을 때 컴파일 성공이 되는지 궁금합니다. 감사합니다.
-
해결됨CUDA 프로그래밍 (1) - C/C++/GPU 병렬 컴퓨팅 - CUDA 커널 kernel
에러처리 매크로에서!!
에러처리 매크로에서 exit을 하게되면 이전에디바이스나 호스트에서 동적할당했던 자원을 해제해주는건가요?? 아니면 메모리해제를 추가적으로 구현해야하나요??
-
미해결홍정모의 따라하며 배우는 C언어
14.22 함수 포인터의 사용 방법
해당 강의에서 선생님께서 ToUpper 함수와 ToLower함수를 직접 만들어서 사용하시는 것을 볼 수 있는데요, 함수 안의 것들을 main함수로 그대로 가져가서 사용하려 할 때(char str[]을 char* str로 바꿔주고) 오류가 발생합니다 왜 그럴까요??
-
미해결홍정모의 따라하며 배우는 C언어
글자 자동완성...
vs code에서는 엔터 키로 글자 자동완성 기능 사용할 수 있었는데 vs에서 엔터 키로는 자동완성 기능 사용할 수 없더라구요... vs에서 탭 키 말고 엔터 키로 자동완성 할 수 있게 만드는 방법이 있을까요..??
-
미해결홍정모의 따라하며 배우는 C언어
7.8강 단어 세기 예제에서 flag의 논리값
7.8강 단어세기 예제에서 교수님께서 제시한 코드입니다.(word 개수 체크는 구현하지 않은 지점까지)두번째 if문에서 공백이 아니고 line_flag값이 true가 아니라면, n_lines의 값을 증가시키고 line_flag 값을 true로 바꿔주고 있고세번째 if문에서 개행문자라면 line_flag 값을 false로 바꿔주고 있습니다.다만 line_flag의 값이 true가 아닌 상황에서 n_lines의 값을 증가시킨다는 흐름이 직관적으로 와닿지 않아 다음과 같이 코드를 바꿔보았습니다.#include <stdio.h> #include <stdbool.h> #include <ctype.h> #define STOP '.' int main() { unsigned int n_char = 0, n_word = 0, n_line = 1; char ch; bool line_flag = false, word_flag = false; while ((ch = getchar()) != STOP) { if (!isspace(ch)) n_char++; if (!isspace(ch) && line_flag) { n_line++; line_flag = false; } if (ch == '\n') line_flag = true; } printf("c=%u, w=%u, l=%u\n", n_char, n_word, n_line); return 0; }flag에 해당하는 논리값을 반대로 뒤집은 코드입니다.line_flag 값이 true일 때 n_lines의 값을 증가시키는 것이 더 직관적이라고 생각했습니다.마찬가지로 개행문자를 만났을 때 line_flag 값을 true로 바꿔주는 것이 더 직관적으로 와닿는다고 생각했습니다.대신 n_lines는 1로 초기화했습니다. 일단 텍스트를 입력받는 순간 1줄이 될테니까요.(바로 .을 입력하여 종료시키는 경우는 예외처리를 추가적으로 구현할 필요가 있어보입니다.) +마찬가지 생각의 흐름으로 word 개수 카운팅하는 부분도 교수님께서 제시하는 word_flag의 논리값을 반대로 적용했습니다. 다만, 텍스트를 입력하는 순간 word가 시작된다고 가정하여 word_flag는 true로 초기화했다는 것이 line_flag와의 차이점입니다.#include <stdio.h> #include <stdbool.h> #include <ctype.h> #define STOP '.' int main() { unsigned int n_char = 0, n_word = 0, n_line = 1; char ch; bool line_flag = false, word_flag = true; while ((ch = getchar()) != STOP) { if (!isspace(ch)) n_char++; if (!isspace(ch) && line_flag) { n_line++; line_flag = false; } if (ch == '\n') line_flag = true; if (!isspace(ch) && word_flag) { n_word++; word_flag = false; } if (isspace(ch)) word_flag = true; } printf("c=%u, w=%u, l=%u\n", n_char, n_word, n_line); return 0; }제가 생각한 코드의 흐름에 대한 의견이나 비판 부탁드립니다.
-
미해결홍정모의 따라하며 배우는 C언어
boolean
int True = 1;int False = 0;이렇게 안하고 boolean을 사용 하는 이유가정수인지 true, false인지 명확하게 구분 짓기 위해 boolean을 사용 한다고 하셨는데명확하게 구분 지으면 무슨 이점이 있는건가요??컴퓨터 안에서는 그냥 0 아니면 1로만 인식 하는거 아닌가요??
-
미해결홍정모의 따라하며 배우는 C언어
1.9강 컴파일러와 링커 부분에서 obj 파일
안녕하세요 선생님따라하면서 강의 듣는 중인데요,open containing 으로 열면 obj 파일이 없습니다..그리고 자체 debug 폴더도 없구요(따로 있는 debug 폴더는 있어요,,)뭐가 잘못된걸까요,,??
-
미해결홍정모의 따라하며 배우는 C언어
boolean 을 사용하는 이유
int True = 1;int False = 0; 라는 방법이 있는데 왜 굳이 bool을 사용하나생각을 해봤는데 bool의 메모리 크기는 2바이트고int의 메모리 크기는 4바이트니까단순히 메모리 공간을 최소화 하기 위해서 맞나요??
-
미해결홍정모의 따라하며 배우는 C언어
질문드립니다,,
처음에 #define _CRT_SECURE_NO_WARNINGS를 입력하는 경우는 어떠한 경우에 입력하는건가요..?
-
미해결정혜경 판타스틱 자료구조 in C
17강 알고리즘 문제풀기(Editor)에서 질문있습니다.
안녕하십니까 강사님 강의 듣고있는 수강생입니다.알고리즘 문제풀기(Editor)강의에서 질문있어서 게시판에 글남깁니다.저는 명령어를 입력하는단계에서 for문과 if문을 활용하였는데 첨부드린 사진처럼 for문의 반복횟수가 5번을때는 두번의 L명령어만 실행이됩니다.for문의 반복횟수를 10회이상으로 늘렸을때는 답이 나오는데 무엇이 문제인지 모르겠습니다. fscanf함수를 활용하였는데도 개행문자를 읽는것 같기도 해서 한번 봐주시면 감사하겠습니다..
-
미해결혼자 공부하는 C 언어 저자에게 배우는 C 언어의 모든 것
반환값이 없는 함수 사용에 대하여
반환값이 없는 함수에 나온 예제를 그대로 실행시켜봤는데#include<stdio.h>void print_char(char ch, int cnt){ int i; for (i = 0; i < cnt; i++); printf("%c", ch);}int main(){ print_char('*', 5);}코드를 실행시켰습니다.근데 결과물이 *****이 나와야할거같은데결과가 * 하나만 나와요 뭐가 잘못된건가요?
-
미해결홍정모의 따라하며 배우는 C언어
11.6 다양한 문자열 함수들 - my_strcat 만들기 질문
이렇게 함수를 만들었는데 출력에는 S만 붙어서 출력이 됩니다. 이유를 잘 모르겠습니다..
-
미해결홍정모의 따라하며 배우는 C언어
visual studio 2022, mac에서는 c/c++ 지원이 안되나요?
제목과 동일합니다.visual studio 2022에서 맥은 c/c++지원이 안 된다는데 사실인가요? 그럼 visual studio code로 실습해도 괜찮을지 궁금합니다.
-
미해결홍정모의 따라하며 배우는 C언어
(강의 10:21) 배열의 이름 dest에 "Start something"을 대입하는 것이 안되는 이유
강의 10: 21부분입니다.교수님께서 61번째 문장 dest = "Start something"; //Error에서 에러가 발생한다고 말하셨는데, 어째서 에러가 발생하게 되는 것인지 잘 모르겠습니다.error C2106: '=': left operand must be l-value빌드를 실행해보면 왼쪽은 l-value로서 작동해야한다고 합니다.이미 공간(주소)을 할당받은 배열 dest가 있고,배열의 이름 dest, 즉 포인터에다가, (수정불가능한/읽기만 가능한 프로그램 코드에 있는) "Start something"이라는 문자열의 주소를 대입함으로서 그걸 수정(?)하려 시도했기에 에러가 발생하는걸까 싶기도 하고.. 머릿 속의 개념이 꼬여버렸습니다.※그치만 이것이 안되는 경우는,'포인터로 정의한 문자열이 있을 때 포인터를 통해 인덱싱하여 값을 수정하려고 했을 때" 문제가 발생하는 경우였습니다.이번 dest = "Start something"; //Error의 경우에 해당하진 않을 것 같습니다.
-
미해결홍정모의 따라하며 배우는 C언어
scanf()
int sum = i + j; 를 scanf 해주기 전, 저 같은 경우는 i, j를 초기화 해준 바로 다음에 작성해줬는데 이 때 scanf를 통해 입력 받은 값의 합이 할당되는 것이 아닌 초기화 된 값의 합을 할당받는 것을 보았습니다. 코드를 사용하는 순서가 달라지면 왜 결과가 이렇게 변하나요?
-
미해결홍정모의 따라하며 배우는 C언어
디버깅을 하면 VS가 응답 없음이 되어버립니다
구글링을 통해 나온 방법들을 적용해 보았으나 상황이 변하지 않습니다 어떻게 해야 할까요?
-
미해결홍정모의 따라하며 배우는 C언어
[보충] 메모리를 OS에게 반납한다는 표현
강의 노트 작성이 안되어서 여기에 적습니다. 참고하세요.[보충]1. 제가 강의에서 메모리를 운영체제에게 반납한다라고 간단하게 말씀드리고 있는데 내부적으로는 조금 더 복잡하고 오해의 여지도 있어서 추가적으로 설명을 드리겠습니다.일단, 운영체제가 우리의 프로그램에게(보다 구체적으로는 process에게) 메모리를 줄 때는 가상 메모리(virtual memory)라는 개념을 사용합니다. 이때 우리의 컴퓨터에 꽂혀있는 실제 메모리 카드를 사용할지 아니면 (다른 프로그램이 메모리를 쓰고 있어서 실제 메모리 카드의 용량이 부족한 경우에) 하드디스크 같은 다른 저장공간을 사용할지는 OS와 연관된 문제가 됩니다. 우리 프로그램이 받은 메모리가 만약 실제 메모리 카드가 아니라 하드디스크를 가상 메모리로 받은 것이라면 아무래도 처리 속도가 느려지겠지요.C언어의 free()에 대해서 검색하다 보면 "메모리를 운영체제에게 반납하지 않는다"라는 얘기가 나옵니다. 제가 사용한 "운영체제에게 반납한다"라는 표현과 반대로 보이지만 사실은 같은 얘기입니다. 운영체제 입장에서는 당장 다른데 쓸 일이 없으면 "혹시 네가 다시 필요할 수도 있으니까 가상 메모리는 일단 가지고 있어"라는 라면서 그냥 둔다는 의미입니다. 그렇지만 실제 메모리는 운영체제가 다른 프로그램에게 쓰라고 줘버렸을 수도 있습니다.C에서는 free()한 메모리를 다시 사용하지 말라고 신신 당부를 하는데요, 만약에 정말로 프로그램이 실제 메모리를 계속 가지고 있는 거라면 주의하라고 할 이유가 없겠죠. 정리하겠습니다. 저는 여러분께 보다 쉽게 설명드리기 위해서 운영체제가 메모리를 다른데 쓸 수 있다는 의미에서 반납했다라고 말씀을 드렸고 그 의미를 조금 더 설명드렸습니다. 다른 프로그래머들과 의사소통을 하실 때에는 "메모리를 반납했다"라는 표현보다는 "메모리를 해제(deallocate)" 했다라는 표현을 더 많이 사용합니다.참고자료1. "Even if the pages are still remaining in the ownership of this process, but not being used, the actual RAM can be used by another process. So it's not a big deal if the pages haven't been released for some time."참고자료2. Learn C The Hard Way p 80, "you use free to return it to the OS so that it can be used by other programs."참고자료3. "the memory could have been returned to the operating system (a "page" of memory that you're no longer using can be removed from your address space, so there is no longer any memory available at that address - essentially an unused "hole" in your application's memory)." "This is why it is important to make sure you don't use a pointer after freeing the memory it points at."
-
해결됨홍정모의 따라하며 배우는 C언어
0.10 17:00 경 8비트 정수의 범위에 대한 질문
안녕하세요, 강의를 잘보고 잘 이해하고 있다고 생각하고 진행하고 있습니다만, 의문점이 생겼습니다.8비트 정수의 범위를 설명해주실 때부호가 있는(signed) 정수일 경우 범위를 -128 ~ 127로표현해주셨는데요.분명 128의 숫자는 2진수로 표현하였을 때 1000 0000이 맞습니다.이걸 알려주신 '2의 보수' 표현법으로 -128을 나타내면1000 0000 -> 0111 1111 이 되고 +1을 하면1000 0000가 됩니다만 앞선 설명에서는 첫번째 비트공간을음수,양수를 판별하기 위해 사용되는 자리라고 설명해주셔서그렇게 생각하고 있었습니다만 이렇게 될 경우8비트 이니까 128의 2진수인 1000 0000에서 맨앞에 1이 부호를 표현하는 자리이기 때문에 짤리고 000 0000 으로 표현되는 것 이 아닌가요?그렇게 되면 "부호가 있는 정수"의 범위일 경우000 0000 ~ 111 1111(127)이 된다는 건데 뭔가 이상하고그렇다고 1000 0000 을 -0으로 치부해 버리면0을 '2의 보수' 계산법을 통해 계산하였을 경우 똑같이-0 이나 0이나 같은 0000 0000 값이 나와서 이상하고그냥 -128의 경우 +128이나 -128이나 2진수가 같기 때문에 이럴경우는 1000 0000 일때 000 0000 이여도 -128로 정해둔 것 인가요? 아니면 다른 이유가 있을까요?
-
미해결홍정모의 따라하며 배우는 C언어
(2:49) 코드의 진행 방식이 머릿속에서 꼬여버려서 while문을 추가하였을 때, 정상적으로 출력되는 이유를 모르겠습니다.
디버그를 해보았는데도 이해가 되질 않아 질문을 올립니다.둘 다 실행했을 때, y입력 후 엔터를 쳤다고 가정하고제 나름대로 작동 순서를 글로 작성해보았습니다.1번째 코드 (while문, continue 없음)이것이 처음 작성한 코드입니다.ex) y 입력 후 엔터"Current count is 0. Continue? (y/n)" 출력 후 입력 대기→ y 입력 후 엔터if문에서 입력한 문자 'y'와 n을 비교한다. [검사]n이 아니므로 빠져나오지 않고 count++ 실행"Current count is 1. Continue? (y/n)" 출력 후 입력 대기→ (버퍼에 있던 \n)if문에서 입력한 문자 \n과 n을 검사하여 통과 [검사]count++실행"Current count is 2. Continue? (y/n)" 출력 후 입력 대기2번째 코드 (while문, continue 추가)이것이 두번째 작성한 코드입니다.ex) y 입력 후 엔터"Current count is 0. Continue? (y/n)" 출력 후 입력 대기→ y 입력 후 엔터if문에서 입력한 문자 'y'와 n을 비교한다. [검사]n이 아니므로 반복문(while(1))을 빠져나오지 않는다.while(2)문에서 y 검사(참) → continue 실행 [무시]while(2)문에서 \n 검사(거짓) → 빠져나옴count++ 실행"Current count is 1. Continue? (y/n)" 출력 후 입력 대기if문에서 입력한 문자 '\n'과 n을 비교한다. [검사]if문을 빠져나와 while문의 조건(거짓)을 만족시키지 못한다.count++ 실행"Current count is 1. Continue? (y/n)" 출력 후 입력 대기------------------------------1. 2번째 코드에서 while(2)문과 continue;의 조합으로 작성한 코드가 어째서 '첫번째 글자를 제외한 나머지를 버퍼에서 싹 지워주기 위함'인지 잘 모르겠습니다.결과적으로 while문-continue는 첫번째 글자 포함, 그 이후 글자까지 무시한 후 \n은 false이므로 아무 작용을 하지 못하는 것이 아닌가 싶습니다.→결국 2번째 반복(cycle)에서 버퍼에 남아있는 \n을 if문에서 판단하고, 결국 1번째 코드와 동일하게 작동하는 것이 아닌가요?
-
미해결홍정모의 따라하며 배우는 C언어
형식 지정자
int32_t를 출력할때 PRI32를 사용하는이유가 형식 지정자를 알수가 없다고했는데int32_t는 32비트를 사용하니까 4바이트이고 그러면 그냥 %d를 사용하면되는거 아닌가요?