책 내용 질문하기
2020 정보처리산업기사 실기 1권 페이지 366
도서
2020 시나공 정보처리산업기사 실기 [기본서]
페이지
366
조회수
333
작성일
2020-07-29
작성자
탈퇴*원
첨부파일

안녕하세요 다름이 아니라 가변 배열을 visual studio에서 구현하지 못하겠어서 질문을 남겼습니다.

일단 코드대로 해봤는데 안 돼서 구글링으로 여러가지 해봐서 알아봤는데

속성 > 언어 > 예에서 아니오로 바꾸기도 해보고 malloc함수를 이용하는 방법도 있었는데 그것도 오류가 나서

물어볼 곳이 없어서 질문 드렸습니다.

아 그리고 항상 고생 많으십니다!!

답변
2020-07-30 10:15:16

안녕하세요 길벗수험서 운영팀입니다.

 

교재의 가변 배열은 가변 배열을 허용하는 C 컴파일러(C99 표준 적용 버전)를 이용한 것입니다.

visual studio에서 수행하려면 컴파일러를 다운받아 등록해줘야 하죠.

말록의 사용 방법은 다음과 같습니다.

  

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <stdlib.h>

main() {

int n;

scanf("%d", &n);

int* arry = malloc(sizeof(int) * n);

 

for (int i = 0; i < n; i++) {

arry[i] = i;

printf("%d", arry[i]);

}

 

free(arry);

}

 

1줄 scanf 경고 무시

3줄 malloc 함수 포함한 헤더

7줄 malloc으로 int 사이즈(4바이트) * 입력값(n) 만큼의 메모리를 포인터 변수 arry에 배정

마지막줄 메모리 해제

 

해당 코드와 관련해서 visual studio의 컴파일러는 주의(warning)를 띄울 수 있으나 무시하셔도 좋은 주의입니다.

해당 주의에 대한 정보는 다음 링크를 참조하세요.

https://stackoverflow.com/questions/37205179/vs2015-c6386-buffer-overrun-while-writing-even-for-same-index-value 

 

만약 말록으로 2차원 배열을 선언하고 싶다면,

1. int 포인터 자료형으로 구성된 1차원 배열(행)을 생성한 후,  int **a;

2. 반복문을 통해 각 행마다 int 자료형으로 구성된 메모리를 배정해주면 됩니다.

 

행복한 하루되세요 :)

  • 관리자
    2020-07-30 10:15:16

    안녕하세요 길벗수험서 운영팀입니다.

     

    교재의 가변 배열은 가변 배열을 허용하는 C 컴파일러(C99 표준 적용 버전)를 이용한 것입니다.

    visual studio에서 수행하려면 컴파일러를 다운받아 등록해줘야 하죠.

    말록의 사용 방법은 다음과 같습니다.

      

    #define _CRT_SECURE_NO_WARNINGS

    #include <stdio.h>

    #include <stdlib.h>

    main() {

    int n;

    scanf("%d", &n);

    int* arry = malloc(sizeof(int) * n);

     

    for (int i = 0; i < n; i++) {

    arry[i] = i;

    printf("%d", arry[i]);

    }

     

    free(arry);

    }

     

    1줄 scanf 경고 무시

    3줄 malloc 함수 포함한 헤더

    7줄 malloc으로 int 사이즈(4바이트) * 입력값(n) 만큼의 메모리를 포인터 변수 arry에 배정

    마지막줄 메모리 해제

     

    해당 코드와 관련해서 visual studio의 컴파일러는 주의(warning)를 띄울 수 있으나 무시하셔도 좋은 주의입니다.

    해당 주의에 대한 정보는 다음 링크를 참조하세요.

    https://stackoverflow.com/questions/37205179/vs2015-c6386-buffer-overrun-while-writing-even-for-same-index-value 

     

    만약 말록으로 2차원 배열을 선언하고 싶다면,

    1. int 포인터 자료형으로 구성된 1차원 배열(행)을 생성한 후,  int **a;

    2. 반복문을 통해 각 행마다 int 자료형으로 구성된 메모리를 배정해주면 됩니다.

     

    행복한 하루되세요 :)

· 5MB 이하의 zip, 문서, 이미지 파일만 가능합니다.
· 폭언, 욕설, 비방 등은 관리자에 의해 경고없이 삭제됩니다.