안녕하세요 복습은 어떤식으로 하면 되나요
미해결
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
안녕하세요 복습은 어떤식으로 하면 되나요
- python
- 웹-크롤링
172만명의 커뮤니티!! 함께 토론해봐요.
미해결
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
안녕하세요 복습은 어떤식으로 하면 되나요
해결됨
홍정모의 따라하며 배우는 C언어
안녕하세요. 11강에서 질문을 드려야 했는데 이번 강의를 보고 한번 정리하고 가고자 질문을 드리게 되었습니다. 질문을 좀 더 자세하게 하기 위해 메모리 레이아웃 사진첨부를 하였습니다. const char* str = “Constant string”; // str is a modifiable lvalue. str = “Second string”; // “Constant string” = “Second String” // imposible str[0] = ‘A’; //Error char str2[] = “String in an array”; str2[0] = ‘A’; // OK 이번 강의에서 나온 코드를 가지고 개념 정리를 하고 싶습니다. 코드에 쓰인 문자열은 어디에 저장이 되는가? 이번 강의에서 쓰인 문자열 포인터 char* str = “Constant string” str = “Second string” 그리고 문자열 배열 char str2[] = “String in an array” 여기에 쓰인 모든 문자열 “Constant string”, “Second string”, “String in an array” 은 TEXT Segment 즉 프로그램 코드에 저장이 되는 걸로 알고있습니다. 맞을까요? 문자열 포인터와 문자열 배열의 차이 문자열 포인터는 TEXT Segment에 저장되어 있는 문자열의 메모리 주소를 가리키는 것이다. 즉 읽기 전용에 저장되어 있기 때문에 str[0] = 'A'와 같이 수정하려 하면 OS에서 막는다. 이걸 VS에서 디버깅으로 확인을 해보았습니다. 먼저 const char* str = “Constant string”;을 확인 해보았습니다. str 포인터 변수가 가리키고 있는 메모리 주소를 메모리에서 찾아 보았습니다. 검색을 해보니 문자열의 시작 문자 'C'의 메모리 주소를 가리키고 있으며 문자열의 끝인 g 다음엔 \0이 붙어있는 걸 확인할 수 있었습니다. 여기서 str = “Second string”; 구문을 만난다면 str 포인터 변수가 가리키고 있는 메모리 주소가 문자열의 시작 문자'S'의 메모리 주소를 가리키고 있는걸 확인하였습니다. 그리고 문자열의 끝인 g옆에는 \0이 붙어있는걸 확인할 수 있었습니다. 그럼 여기서 문자열 배열은 어떤 식이냐 일단 문자열 포인터와 문자열 배열에서 사용한 문자열들은 TEXT Segment에 저장이 되어있기 때문에 메모리에서 보면 사용한 문자열들이 나란히 있는 걸 확인할 수 있었습니다. 하지만 디버깅을 통해 현재 문자열 배열인 str2[]의 메모리 주소를 보면 인걸 확인할 수 있었습니다. 분명 저 문자열이 저장되어 있는 메모리 주소 : 0x00007FF648499C10 이랑 전혀 틀린 주소입니다. 검색해보면 똑같은 문자열이 해당 메모리 주소에도 있는걸 확인하였습니다. 위와 같은 내용을 통해 알수 있었던 것은 프로그램 만들때 사용한 모든 문자열은 TEXT Segment(읽기전용)에 저장이 되며 문자열 포인터는 TEXT Segment에 있는 "문자"의 메모리 주소를 가리키는 것이며 문자열 배열은 스택이라는 (읽기, 쓰기전용)메모리 공간을 할당받고 TEXT Segment에서 문자열들을 복사해오기 때문에 str2[0] = 'B' 같은 수정이 가능한 것이다. 라고 이해를 하였는데 제대로 이해한게 맞을까요? 마지막으로 문자열 포인터를 사용하는 이유? 마지막 질문은 제가 생각을 해보았습니다. 수정도 못하는 문자열 포인터는 왜 사용할까? 생각을 해보았는데 프로그램을 보면 분명 수정이 필요없는 고정된 문자열들을 본적이 있습니다.그런것들을 사용할 때 불필요하게 TEXT Segment에 저장이 되었다가 스택 메모리를 할당 받고 데이터를 "복사"해서 사용하면 메모리 낭비가 일어나고 어떤 행위를 하는 것 이기 때문에 불필요한 과정을 하기 때문에 이런 것들은 그냥 TEXT Segment에 저장 되어있는 문자열의 주소를 가리켜서 사용하면 메모리 절약을 할 수 있는 관점에서 사용하는 것 일까요?
해결됨
독하게 시작하는 C 프로그래밍
char ch = 0; scanf_s("%c", &ch, 1); printf("%d", ch); char ch = 0; ch = getchar(); printf("%d", ch); 여기서 scanf_s와 getchar의 차이가 뭔가요?
미해결
[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)
- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다) - 이외의 문의등은 평생강의이므로 양해를 부탁드립니다 - 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다 - 잠깐! 인프런 서비스 운영(다운로드 방법포함) 관련 문의는 1:1 문의하기를 이용해주세요. 포스트맨 구성이 달라져서 블로그 보고 따라해봐서 성공했습니다 업데이트 되어 달라진 것 같아서, 다른 분들도 참고하실 수 있게 강의 내용도 업데이트 되거나 게시판에 업로드 해주시면 좋을 거 같습니다-
미해결
혼자 공부하는 C 언어 저자에게 배우는 C 언어의 모든 것
맥으로수강하기 괜찮을까요? 에어 m1입니다
미해결
C 프로그래밍 - 입문부터 게임 개발까지
맥으로 수강하기 괜찮을까요? 에어 m1입니다
해결됨
독하게 되새기는 C 프로그래밍
혹시 비선형 자료구조 강의를 만드실 생각이 있으신가요? 있으면 듣고 싶네요 ㅎㅎ
해결됨
Windows 시스템 프로그래밍 - 기본
시스템 프로그램 함수 매개변수에 NULL을 사용할때 c식으로 코딩하려면 NULL이고 c++식으로 코딩하면 nullptr로 써두는게 협업에서 도움이 되나요? 시스템 프로그래밍이나 소켓프로그래밍에서 scanf와 printf문,char배열을 쓰는것보다 cout,cin,endl,string을 쓰는게 성능 차이가 많이 나나요?
해결됨
독하게 시작하는 C 프로그래밍
memcpy 의 내부동작을 설명하실때 동적메모리할당 구문이 있었는대 이 부분은 free 로 안닫아줘도 괜찮은건가요??
해결됨
홍정모의 따라하며 배우는 C언어
#include <stdio.h> void swap(int* xp, int* yp); void printArray(int arr[], int size); void selectionSort(int arr[], int n); int main() { int arr[] = { 64, 25, 12, 22, 11,}; int n = sizeof(arr) / sizeof(arr[0]); selectionSort(arr, n); printArray(arr, n); return 0; } void printArray(int arr[], int size) { for (int i = 0; i < size; i++) printf("%d\n", arr[i]); } void swap(int* xp, int* yp) { int tmp = *xp; *xp = *yp; *yp = tmp; } void selectionSort(int arr[], int n) { for (int i = 0; i < n - 1; i++) { int* min_idx = &arr[i]; for (int j = i + 1; j < n; j++) { min_idx = (*min_idx < arr[j]) ? min_idx : &arr[j]; } swap( min_idx, &arr[i]); } } 선생님의 빈 칸 맞추기를 공개하시기 전에 문제를 생각하여 풀어봤습니다. 여러 숫자를 집어넣어봐도 잘되는 것 같습니다. 이 코드가 문제없이 잘 작동하는 코드일까요? 그리고 여기서 삼항연산자를 썼는데 삼항연산자가 자주 쓰이는 연산자 인가요?
해결됨
홍정모의 따라하며 배우는 C언어
#include <stdio.h> int start; int loop(int n); long recursive_factorial(int); int main() { int b = recursive_factorial(5); printf("your final destination is % d", b); return 0; } long recursive_factorial(int n) { if (n != 0) { // recursion 함수 : it is called "재귀호출" and tail recurision in english printf("%d\n", n); return n * recursive_factorial(n - 1); } printf("hki"); // 이 줄 없을때는 그냥 120 출력된다. 그러나 이 줄 추가했더니 뭔가 다르다. //출력스트링의 길이가 반환값인가? hi 일때 최종값 240, hki일때 최종값 360이네(120씩 증가한다.), 근데 한글은 길이 한 번 늘때마다 240씩 증가하네? } 코드입니다. 팩토리얼 예제를 얼떨결에 직접 풀었지만, 궁금증이 가시지 않아 질문 올립니다. 첫 번째, recursive_factorial(2)는 2 * 동일한 함수의 (1)을 반환값으로 갖습니다. 이때 함수(1)의 반환값은 어찌 되나요? 두 번째, 주석으로 남겨둔 내용의 이유가 궁금합니다.
해결됨
홍정모의 따라하며 배우는 C언어
5분 37초 ch = fgetc(fp); 로 버퍼에 문자들을 채우고 거기서 1글자를 가져오고 for (int i = 0; i < sizeof(buffer); ++i) printf("%c", buffer[i]); printf("\n"); 로 버퍼에 있는 내용들을 전부 출력해보면 fgetc() 함수로 가져온 문자를 포함해 모든 문자가 출력되는 걸 볼 수 있는데 제가 알기로는 버퍼에 있는 내용을 복사를 하면 복사를 한 내용이 버퍼에서는 지워지는 걸로 알고 있는데 그렇다면 버퍼에서 먼저 fgetc() 함수로 가져온 문자가 지워져서 버퍼의 내용들을 출력할 때 그 문자는 제외되어야 하는 것 아닌가요? 제가 버퍼에 대해 잘못 이해하고 있는 건가요?
해결됨
홍정모의 따라하며 배우는 C언어
fsetpos() 함수가 어떻게 작동하는지 이해가 잘 안돼서 fpos_t pt; pt = 10; fsetpos(fp, &pt); ch = fgetc(fp); printf("%d %c\n", ch, ch); fgetpos(fp, &pt); printf("%lld\n", pt); 위의 코드 다음에 fsetpos(fp, &pt); ch = fgetc(fp); printf("%d %c\n", ch, ch); fgetpos(fp, &pt); printf("%lld\n", pt); 이런 식으로 코드의 일부분을 추가로 복사 붙여넣기하여 실행하면 어떻게 될지 궁금해서 실행을 해봤더니 이런 결과가 나왔습니다. 실행하기 전에 결과를 예상해봤는데 똑같이 K가 출력되거나 K의 다음칸에서 10칸만큼 더 이동을 해서 V가 출력될 줄 알았습니다 그런데 제 예상과는 완전 다른 결과가 나와버렸네요 아마 읽고나면 한 칸 이동을 하는 특성 때문에 그렇게 되는 거 같은데 그게 어떻게 작동하길레 저런 결과가 나오는지 궁금합니다. 항상 좋은 답변 정말 감사합니다.
미해결
프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)
rokoppa@gmail.com 입니다. 감사합니다~!
해결됨
홍정모의 따라하며 배우는 C언어
8분 8초에서 feof() 함수는 EOF를 만났는가 물어봐요 라고 하시고 8분 16초에서 근데 지금 깔끔하게 저장된 개수만큼 왔기 때문에 EOF를 만나지 않은 상태에요 라고 하시는데 EOF를 만났는가 물어본다는 말에서 어떤게 EOF를 만났는가 물어본다는 것인지 저장된 개수 만큼 왔기 때문에에서 뭐가 저장된 개수 만큼 왔다는 것인지 잘 모르겠습니다. 지금까지의 강의 내용을 이해해보면 전자와 후자는 같은 걸 말하는 것 같고 뉘앙스만 보면 파일을 얼마나 읽어들였는지에 대한 진행도? 같은 느낌이 드는데 정확하게 이게 뭔지 잘 모르겠습니다 항상 좋은 답변 정말 감사합니다.
해결됨
홍정모의 따라하며 배우는 C언어
void selectionSort(char* arr[], int n) { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (strcmp(arr[j], arr[i]) < 0) swap(&arr[i], &arr[j]); } } }
해결됨
독하게 시작하는 C 프로그래밍
stdlib에서 제공하는 qsort 함수 qsort(void base, size_t width, int(*compare)(const void* key, const void* element)) 에서 compare부분이 비교함수를 가리키는 함수 포인터라고 알고있습니다. 그렇다면, qsort(aList, 5, sizeof(int), *myCompare); 같이 넣지 않고 qsort(aList, 5, sizeof(int), myCompare); 처럼 넣는 이유가 뭔가요?
해결됨
독하게 시작하는 C 프로그래밍
int(*pfGetMax)(int,int,int) = GetMax; 를 통해 함수 포인터 선언 정의를 동시에 하고 printf("MAX: %d\n", pfGetMax(1,3,2)); 를 하셨는데 함수 포인터를 사용하여 GetMax 함수를 호출하는 과정에서 pfGetMax(1,3,2)를 사용하셨는데 이 표현이 이해가 가지 않았습니다. 포인터의 간접지정을 통해서 값을 가져와야 한다고 생각했는데 (*pfGetMax)(1,3,2) 처럼 해야하는 것이 아닌가요?
해결됨
독하게 시작하는 C 프로그래밍
if문을 쓰는 것과 아래 코드처럼 for문만 쓰는 것 중에 어느 코드가 더 효율적인가요? for (int i = 1; i <= 5; i++) { for (int j = 0; j < 5 - i; j++) { printf(" "); } for (int j = 0; j < i; j++) { printf("* "); } puts(""); }
미해결
홍정모의 따라하며 배우는 C언어
사용자로부터 첫번째 문자와 마지막 문자, 그리고 몇번 반복할건지를 직접 입력받는 경우를 가정하여 다음과 같이 코딩해봤습니다. 문자를 입력받고, 정수로 형변환한 후, 정수를 한개씩 늘려가다가 사용자가 지정한 마지막 문자를 만나면 멈추고 다시 문자로 출력되도록 하면 되겠다 싶어 작성한 코드입니다. 첫번째 scanf까지는 정상적으로 작동하는데 두번째 scanf값을 입력하면 실행창이 꺼져버립니다. 어느 부분에서 오류가 발생한건지 알 수 있을까요?