묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결홍정모의 따라하며 배우는 C언어
포인터 연산에 관한 질문.
#define CRT_SECURED_NO_WARNINGS#include <stdio.h>#include <string.h>void fit_str(char*, unsigned int);int main(){ char msg[] = "just,""do it!"; puts(msg); printf("lenght %d\n", strlen(msg)); fit_str(msg, 4); puts(msg); printf("length %d\n", strlen(msg)); return 0; }void fit_str(char*a, unsigned int b){ a[b] = '\0';} 마지막 줄의 a[b]는 되는데 a+b는 왜 안될까요...? a는 포인터 배열이기 때문에 a+b 연산이 a[b]와 같지 않나요?
-
미해결정혜경 판타스틱 자료구조 in C
fileopen하는 txt파일을 어디서 다운받을 수 있나요?
txt파일이 다운로드 zip파일 안에 없습니다!파일이 없으니 코드를 바르게 쳤는지 실행해서 알아볼 방법이 없습니다.
-
해결됨CUDA 프로그래밍 (2) - C/C++/GPU 병렬 컴퓨팅 - 벡터 vector 더하기
Warp 갯수에 대한 고찰입니다....
SM내 warp가 24개가 이상일 경우에 overlab이 생기지 않아 효율적인 스케줄링이 가능하다는 것은 정확히 이해 했지만, Warp 갯수가 적어지면 근본적으로 작업시간 자체는 줄지 않을까? 그렇다면 빨리 끝나는게 스케줄링이 좋은거 아닐까? 라는 생각이 들었습니다.다음은 제 생각을 담은 그림입니다.다음과 같이 23개의 warp가 overhead가 걸릴 수는 있겠지만 일이 끝나는 시간은 짧지 않을까?또 반대로 warp의 수가 작다는 것은 일 양이 많지 않다는 것이니 당연히 빨리 끝나는게 맞지 않을까?라는 생각을 했습니다.
-
미해결홍정모의 따라하며 배우는 C언어
8.5 getchar()와 scanf()를 함께 쓸 때 버퍼 비우기
안녕하세요, 공부하다 버퍼에 대한 궁금증이 생겨 질문드려요!아래의 코드를 실행하고 콘솔에서 입력할 때, A(엔터'\n')3(공백)5(엔터'\n') 의 형식으로 입력하게 되면, A와 3 사이에 제가 입력한 엔터는 따로 버퍼 비우기를 하지 않았는데도 scanf를 만났을 때 문제를 일으키지 않는데요..! 그 이유를 알고 싶습니다.강의 너무 잘 듣고 있고, 교수님 강의 덕에 c에 대해 더 본질적으로 알게 되는 것 같아 늘 감사드립니다!#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> void display(char cr, int lines, int width); int main() { char c; int rows, cols; printf("Input one character and two integers : \n"); while ((c = getchar()) != '\n') { scanf("%d %d", &rows, &cols); while (getchar() != '\n') continue; display(c, rows, cols); printf("Input another character and two integers:\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) putchar(cr); putchar('\n'); } }
-
미해결홍정모의 따라하며 배우는 C언어
p2와 ar2가 왜 호환이 안되는지 모르겠습니다.
교수님이 p2는 이중포인터이고 ar2는 2개의 int를 가진 배열의 포인터...?라고 말씀하시는데 잘 모르겠습니다. 말씀이 이해가 안됩니다. p2는 두번의 주소값을 거쳐야 하는데 ar2는 ar2[0][0]의 주소값을 의미하기 때문에 한번만 주소값을 거칠 수 밖에 없어서 호환이 안되는건가요>?
-
해결됨독하게 되새기는 C 프로그래밍
파일 처리와 UI 분리 #2에서 동기화가 없어도 괜찮은건가요?
File I/O를 위한 thread를 생성했을 때 User Event 받는 thread가 같은 자원에 접근하는데 동기화 없이 진행해도 괜찮은건가요?
-
해결됨홍정모의 따라하며 배우는 C언어
0.8 CPU가 일하는 방법 질문
안녕하세요. 강의를 보며 궁금한 점이 있어 글 올립니다. 프로그램을 실행할 때 운영체제가 보조기억장치에 저장된 프로그램을 주기억장치로 복사한다고 알고 있습니다. RAM에 프로그램의 명령어와 프로그램에 저장된 변수들이 복사된다면, 명령어와 변수는 각각 메모리의 다른 부분에 서로 연결된 상태로 복사되어 저장되는 건가요? 질문 읽어주셔서 감사합니다.
-
해결됨홍정모의 따라하며 배우는 C언어
0.6 컴퓨터 메모리의 기본 구조 질문
0.6 파트에서 질문 드릴 것이 있어 글 작성합니다. cpu가 ram으로부터 필요한 정보를 빼올 때, 메모리의 데이터는 항상 캐쉬 메모리에 저장된 뒤에 cpu에서 그 데이터를 연산하는 건가요? 캐쉬 메모리 덕분에 자주 사용되는 데이터를 ram에 직접 요청하지 않고도 cpu가 가져와 사용할 수 있는 것 같은데, 이때 자주 사용되는 데이터가 되는 기준은 무엇인가요? cpu가 ram에게 '어느 주소에 있는 데이터를 보내세요.'라는 요청을 할 때, 그 요청을 control bus가 전달하는 건가요? 그리고 강의를 보면 ram이 그 요청을 수락할 수도 거절할 수도 있는 것 같은데, 이 수락과 거절의 개념이 잘 와 닿지 않습니다. ram이 cpu의 요청을 거절하는 특정한 예시 하나 정도만 이야기해주시면 감사하겠습니다. 질문 들어주셔서 감사합니다.
-
미해결홍정모의 따라하며 배우는 C언어
8.8 메뉴 만들기 예제 개행 입력시 문자가 무시됩니다
안녕하세요! 아래의 코드를 실행시킨 뒤 먼저 '\n'입력 후 원하는 메뉴키를 입력하면 원하는대로 처리가 되지 않아요.가령 이런식으로 엔터를 먼저 입력하고 q를 입력하면 quit를 실행하지 않고 다시 while문을 돌더라고요.디버거로 한단계씩 살펴보니 문제는 get_first_char()함수에서 발생하는데, 처음에 getchar() 함수로 개행(\n)을 받으면서 다음 버퍼비우기(?) 코드에서 또 다시 입력을 받는 것 같고, 이 함수의 리턴값은 처음에 받았던 개행(c='\n')으로 나가서 생기는 문제 같은데요..이 코드에서 어떻게 고쳐야 처음 들어올 개행도 입력오류처럼 처리할 수 있을까요?? 코드는 아래와 같습니다! #define _CRT_SECURE_NO_WARNINGS#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 assemble!\n");break;case 'b':putchar('\a');break;case 'c':count();break;default:printf("Error with %d.\n", user_choice);exit(1);break;}}return 0;}void count(void){int n, i;printf("Enter an interger:\n");n = get_integer();for (i = 1; i <= n; ++i)printf("%d\n", i);while (getchar() != '\n')continue;}char get_choice(void){int user_input;do{printf("Enter the letter of your choice:\n");printf("a. avengers\tb. beep\n");printf("c. count\tq. quit\n");user_input = get_first_char(); } while ((user_input < 'a' || user_input > 'c') && user_input != 'q'); return user_input;}char get_first_char(void){int ch;ch = getchar();while (getchar() != '\n')continue;return ch;}int get_integer(void){int input;char c;while (scanf("%d", &input) != 1){while ((c = getchar()) != '\n')putchar(c);printf(" is not an integer.\nPlease try again.\n");printf("Enter an interger:\n");}return input;}
-
미해결홍정모의 따라하며 배우는 C언어
malloc의 매개변수로 배열의 크기를 전달하는 이유가 궁금합니다
메모리 공간을 얼마나 사용하던지, 결국 malloc()은 사용하는 배열의 첫주소인 void유형의 포인터를 반납하는데,"힙에서 메모리 공간을 얼마나 사용하겠다"라고 전달하여 메모리를 배정받는 이유가 궁금합니다. 어떠한 장점이 있는건가요 ??
-
미해결홍정모의 따라하며 배우는 C언어
3.3 scanf() 15분 18초 질문
교수님께서 설명하신 부분 중에 왜 이렇게 하는가라는 게 왜 scanf 입력을 받고 메모리에 덮어쓰는가 이 뜻인가요? 이렇게 한다라는 게 정확히 어떻게 한다는 것인지 궁금합니다.그리고 왜 이렇게 하는지에 대한 이유가C문법에서는 함수 출력 1개만 가능하고, scanf함수는 여러개의 입력을 받고 값을 바꿔줘야 하는데 그걸 출력으로 할 수 없기 때문이라고 하셨는데함수 출력을 1개만 가능하다는 게 어떤 건지, 값을 바꿔주는 걸 출력으로 할 수 없다는 게 무슨 말인지 잘 모르겠습니다,,, 조금 더 설명 해주시면 감사하겠습니다!
-
해결됨CUDA 프로그래밍 (6) - C/C++/GPU 병렬 컴퓨팅 - 서치 & 소트
39g-merge-global-large.cu에 대해서 질문드립니다.
안녕하세요.예저코드 39g-merge-global-large.cu를 보던 중에 궁금증이 생겨 질문 드립니다.제가 궁금한 부분은 deviceMergeSort함수 마지막 부분에 아래의 2줄입니다.cudaMemcpy( vecC, dev_vecC, TOTAL_NUM * sizeof(unsigned), cudaMemcpyDeviceToHost ); cudaMemcpy( dev_vecB, dev_vecC, TOTAL_NUM * sizeof(unsigned), cudaMemcpyDeviceToDevice );dev_vecC에 들어 있는 정렬된 데이터를 왜 for문 내부에서 dev_vecB와 vecC로 계속 memcpy하는 걸까요?제 생각에는 dev_vecB는 주소값을 스왑하여 사용하면 될거 같았고, vecC도 계산 모두 마무리되어 for문밖에서 복사해줘도 될거 같다고 생각이 들어서요.
-
해결됨독하게 되새기는 C 프로그래밍
declspec(dllimport) 와 extern 은 무슨차이가 있나요?
dll 을 사용하는 쪽에서__declspec(dllimport) 대신에 extern 을 써도 결과가 같던데 다른 차이가 있을까요?
-
해결됨독하게 되새기는 C 프로그래밍
콘솔(CON)은 파일인가요? 디바이스인가요?
제목 그대로입니다~콘솔(CON)은 파일인가요? 디바이스인가요?설명 중간에는 파일이라 하시고, 끝 부분에는 디바이스라고 하셔서요아님 두 개가 같은 의미인가요??
-
미해결홍정모의 따라하며 배우는 C언어
자료
안녕하세요 강의 열심히 듣고 있는 대학생입니다! 혹시 강의 자료 PPT들은 따로 공유해주지 않으시나요? 복습에 쓰고 싶어서요!
-
미해결홍정모의 따라하며 배우는 C언어
2차원 배열 만들때 자동화가 덜 되나요?
temp_data 2차원 배열을 만들때 일일히 36개의 온도를 다 입력하는게 아니라 그냥 예를 들어double data={year2016, year2017, year2018}로 해보려는데 이건 안되더라구요,Q. 2차원 배열을 선언할 때 { }안에 {}을 넣어줘야하는데 그냥 사전에 선언된 길이가 동일한 1차원 배열을 집어넣는건 왜 안되나요? 그냥 c에서 정해놓은 문법인가요?
-
해결됨독하게 되새기는 C 프로그래밍
배열과 벡터에 대해 질문드립니다
안녕하세요 선생님^^강의를 듣다 헷갈리는 부분이 있어 질문 드립니다배열이 메모리의 데이터 영역에 할당된다고 하셨는데 혹시 c++도 해당되는 내용인가요? 제가 강의를 c++로 따라가고 있는데 보통은 스택이나 힙에 할당되고 전역으로 선언하면 데이터 정도로만 알고 있어서 혹여나 c는 다른지? 아니면 제가 모르는 내용이 있는지 궁금해서 질문드립니다지역변수 벡터 v가 있을 때 &v와 &v[0]가 다른 점은 이해가 가는데요, 다만 &v보다 &v[0]가 더 큰 이유를 모르겠습니다... 벡터는 힙에서 동적 할당되는게 아닌가요? &v가 스택이고 &v[0]가 힙이라면 힙이 더 낮은 주소에 위치하니까 &v[0]이 더 작아야 한다고 생각하는데 제가 뭔가 잘못 생각하고 있는 걸까요? 아래는 x86 실행 사진입니다 빠르게 완강하고 소켓 강의 듣고싶은데 집에만 오면 녹초가 되니 참 난감하네요혼자서 공부한다는게 참 쉽지 않은 일인듯 합니다. ㅠㅠ그래도 좋은 강의를 들을 수 있어 행운이겠지요~~ 항상 감사드립니다^^
-
미해결홍정모의 따라하며 배우는 C언어
Error in this lecture가 이 뜻 맞나요?
강의 8번째 코드printf("%d\n", *ptr); // 사용자가 입력한 숫자를 dereferencing하려고 해서 당연히 에러가 발생한다라고 강의에서 언급되는데 사실 정확한 이유를 모르겠어서 제가 추론한 게 맞나 궁금합니다.ptr의 주솟값 자체는 0으로 선언했으나 *ptr, 즉 주소를 따라가서 나타나게 된 그 변수의 값은 null이라서 null을 dereferencing 할 수가 없어서 에러가 생기는 것이다 라고 이해하면 맞을까요?
-
미해결홍정모의 따라하며 배우는 C언어
두번째 입력부터 컴파일을 멈춥는데 왜 그런거죠?
강의에 올라온 코드를 똑같이 입력해 컴파일을 해보아도 처음값까지는 잘 입력이 되는데 두번째로 입력하면 컴파일을 종료합니다. 답변 부탁드립니다. #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) { int num, sum = 0; int status; printf("정수를 입력해주세요 :\n"); status = scanf("%d", &num); while (status == 1) { sum = sum + num; printf("정수를 입력해주세요 :\n"); status = scanf("%d, &num"); } printf("sum = %d\n", sum); return 0; }
-
해결됨독하게 되새기는 C 프로그래밍
파일 생성해서 쓰고 읽을 시, 쓰거나 읽을 내용은 메모리에 버퍼 되나요?
fopen 해서 파일을 읽게 되면, disk 상에서 File * 포인터 주소에서부터 순차적으로 연속된 메모리 배열로 존재하게 되는 것이고, 파일을 쓰게 되면 쓰는 내용들에 메모리 버퍼에 순차적으로 쌓이다가 fclose 하는 순간 disk 공간으로 flush 되는 건가요? 이때 커널의 i/o 드라이버와 HDD or SSD의 디스크 컨트롤러가 동작하는 구조인 것이고요?추가로, fclose 함수는 blocking 방식으로 동작하는 함수 인지 알고 싶습니다.