inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

172만명의 커뮤니티!! 함께 토론해봐요.

안녕하세요 복습은 어떤식으로 하면 되나요

미해결

[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)

안녕하세요 복습은 어떤식으로 하면 되나요

  • python
  • 웹-크롤링
닉네임을 등록해주세요 댓글 1 좋아요 0 조회수 258

문자열 포인터와 문자열 배열의 대한 질문

해결됨

홍정모의 따라하며 배우는 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
김민수 댓글 2 좋아요 2 조회수 301

getchar와 scanf의 차이

해결됨

독하게 시작하는 C 프로그래밍

char ch = 0; scanf_s("%c", &ch, 1); printf("%d", ch); char ch = 0; ch = getchar(); printf("%d", ch); 여기서 scanf_s와 getchar의 차이가 뭔가요?

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
차희원 댓글 1 좋아요 0 조회수 443

포스트맨 구성이 달라졌어요

미해결

[리뉴얼] 파이썬입문과 크롤링기초 부트캠프 [파이썬, 웹, 데이터 이해 기본까지] (업데이트)

- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다) - 이외의 문의등은 평생강의이므로 양해를 부탁드립니다 - 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다 - 잠깐! 인프런 서비스 운영(다운로드 방법포함) 관련 문의는 1:1 문의하기를 이용해주세요. 포스트맨 구성이 달라져서 블로그 보고 따라해봐서 성공했습니다 업데이트 되어 달라진 것 같아서, 다른 분들도 참고하실 수 있게 강의 내용도 업데이트 되거나 게시판에 업로드 해주시면 좋을 거 같습니다-

  • python
  • 웹-크롤링
  • 포스트맨
juhyun2393 댓글 2 좋아요 2 조회수 444

맥으로수강

미해결

혼자 공부하는 C 언어 저자에게 배우는 C 언어의 모든 것

맥으로수강하기 괜찮을까요? 에어 m1입니다

  • c
mingang1022 댓글 1 좋아요 0 조회수 283

맥으로수강

미해결

C 프로그래밍 - 입문부터 게임 개발까지

맥으로 수강하기 괜찮을까요? 에어 m1입니다

  • c
mingang1022 댓글 1 좋아요 0 조회수 205

비선형 자료구조

해결됨

독하게 되새기는 C 프로그래밍

혹시 비선형 자료구조 강의를 만드실 생각이 있으신가요? 있으면 듣고 싶네요 ㅎㅎ

  • c
  • kernel
  • secure-coding
  • 자료구조
TMI_JUNG 댓글 1 좋아요 0 조회수 325

시스템 프로그래밍에서 c와 c++

해결됨

Windows 시스템 프로그래밍 - 기본

시스템 프로그램 함수 매개변수에 NULL을 사용할때 c식으로 코딩하려면 NULL이고 c++식으로 코딩하면 nullptr로 써두는게 협업에서 도움이 되나요? 시스템 프로그래밍이나 소켓프로그래밍에서 scanf와 printf문,char배열을 쓰는것보다 cout,cin,endl,string을 쓰는게 성능 차이가 많이 나나요?

  • c
  • system-programming
  • vc++
도롱뇽YouTube 댓글 2 좋아요 0 조회수 363

memcpy 사용 후 free 함수 사용여부

해결됨

독하게 시작하는 C 프로그래밍

memcpy 의 내부동작을 설명하실때 동적메모리할당 구문이 있었는대 이 부분은 free 로 안닫아줘도 괜찮은건가요??

  • c
  • 컴퓨터-구조
  • assembly-language
  • vc++
김상한 댓글 2 좋아요 0 조회수 336

구현과 삼항연산자의 대한 질문.

해결됨

홍정모의 따라하며 배우는 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
김민수 댓글 1 좋아요 2 조회수 205

함수와 재귀함수(1)이 가지는 반환값

해결됨

홍정모의 따라하며 배우는 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
상인김 댓글 1 좋아요 2 조회수 399

2분 5초경 5분 37초경 질문있습니다.

해결됨

홍정모의 따라하며 배우는 C언어

5분 37초 ch = fgetc(fp); 로 버퍼에 문자들을 채우고 거기서 1글자를 가져오고 for (int i = 0; i < sizeof(buffer); ++i) printf("%c", buffer[i]); printf("\n"); 로 버퍼에 있는 내용들을 전부 출력해보면 fgetc() 함수로 가져온 문자를 포함해 모든 문자가 출력되는 걸 볼 수 있는데 제가 알기로는 버퍼에 있는 내용을 복사를 하면 복사를 한 내용이 버퍼에서는 지워지는 걸로 알고 있는데 그렇다면 버퍼에서 먼저 fgetc() 함수로 가져온 문자가 지워져서 버퍼의 내용들을 출력할 때 그 문자는 제외되어야 하는 것 아닌가요? 제가 버퍼에 대해 잘못 이해하고 있는 건가요?

  • c
용개형멋져 댓글 1 좋아요 2 조회수 181

5분 44초경 질문있습니다.

해결됨

홍정모의 따라하며 배우는 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가 출력될 줄 알았습니다 그런데 제 예상과는 완전 다른 결과가 나와버렸네요 아마 읽고나면 한 칸 이동을 하는 특성 때문에 그렇게 되는 거 같은데 그게 어떻게 작동하길레 저런 결과가 나오는지 궁금합니다. 항상 좋은 답변 정말 감사합니다.

  • c
용개형멋져 댓글 1 좋아요 1 조회수 233

강의자료 부탁드립니다

미해결

프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)

rokoppa@gmail.com 입니다. 감사합니다~!

  • python
댓글 1 좋아요 0 조회수 223

8분 8초경 질문

해결됨

홍정모의 따라하며 배우는 C언어

8분 8초에서 feof() 함수는 EOF를 만났는가 물어봐요 라고 하시고 8분 16초에서 근데 지금 깔끔하게 저장된 개수만큼 왔기 때문에 EOF를 만나지 않은 상태에요 라고 하시는데 EOF를 만났는가 물어본다는 말에서 어떤게 EOF를 만났는가 물어본다는 것인지 저장된 개수 만큼 왔기 때문에에서 뭐가 저장된 개수 만큼 왔다는 것인지 잘 모르겠습니다. 지금까지의 강의 내용을 이해해보면 전자와 후자는 같은 걸 말하는 것 같고 뉘앙스만 보면 파일을 얼마나 읽어들였는지에 대한 진행도? 같은 느낌이 드는데 정확하게 이게 뭔지 잘 모르겠습니다 항상 좋은 답변 정말 감사합니다.

  • c
용개형멋져 댓글 1 좋아요 1 조회수 238

qsort 함수에 관한 질문입니다.

해결됨

독하게 시작하는 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
  • 컴퓨터-구조
  • assembly-language
  • vc++
davidkjcy 댓글 2 좋아요 0 조회수 219

함수 포인터 강의에서 질문이 있습니다.

해결됨

독하게 시작하는 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
  • 컴퓨터-구조
  • assembly-language
  • vc++
davidkjcy 댓글 2 좋아요 0 조회수 215

[필수 실습 문제] '*' 출력 놀이 응용

해결됨

독하게 시작하는 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
  • 컴퓨터-구조
  • assembly-language
  • vc++
정지욱 댓글 2 좋아요 0 조회수 310

6-15강 첫번째 예제 질문

미해결

홍정모의 따라하며 배우는 C언어

사용자로부터 첫번째 문자와 마지막 문자, 그리고 몇번 반복할건지를 직접 입력받는 경우를 가정하여 다음과 같이 코딩해봤습니다. 문자를 입력받고, 정수로 형변환한 후, 정수를 한개씩 늘려가다가 사용자가 지정한 마지막 문자를 만나면 멈추고 다시 문자로 출력되도록 하면 되겠다 싶어 작성한 코드입니다. 첫번째 scanf까지는 정상적으로 작동하는데 두번째 scanf값을 입력하면 실행창이 꺼져버립니다. 어느 부분에서 오류가 발생한건지 알 수 있을까요?

  • c
라라올라 댓글 2 좋아요 2 조회수 276

인기 태그

인프런 TOP Writers

주간 인기글