[C언어] 2차원 배열에 문자열 입력하여 출력하기

조회수 7768회

2차원 배열에 문자열을 입력하려고 하는데 잘 안되네요 ㅠㅠ

2차원 배열 이름을 matrix라고 한다면 matrix[i]번에 문자열을 할당하면 문자열의 각 문자가 matrix[i][j]번에 들어가는 것이 맞나요?

예를 들어 matrix[1] 에 "str"을 할당하면 matrix[1][0]은 s가 되는 것인지요..? 이게 된다는 가정 하에 다음과 같은 코드를 작성했습니다.

#include<stdio.h>
#include<stdlib.h>

#define maxcount 1000000;

int main() {

    int row, column, count = 0;

    scanf_s("%d %d", &row, &column);

        // 메모리 할당 부분
    char** matrix = (char**)malloc(sizeof(char*)*row);
    for (int i = 0; i < row; i++)
        matrix[i] = (char*)malloc(sizeof(char)*column);

    printf("%d\n", matrix[0][0]); // 테스트용 출력

        // 2차원 배열 matrix[i]에 문자열 입력
    for (int i = 0; i < row; i++) {
        scanf_s(" %s", matrix[i], sizeof(char)*column);
        printf("%c\n", matrix[i][0]); //테스트용 출력
    }

    printf("%s", matrix[1]); //테스트용 출력

        // 값 출력
    for (int i = 0; i < row; i++) {
        printf("\n");
        for (int j = 0; j < column; j++)
            printf("%c ", matrix[i][j]);
    }
}

그랬더니 입력 값

2 2

ab

ab

에 출력 값은

 ?

 ?

이 나왔습니다.

문자열이 제대로 입력이 되지 않은 것인데.. 무엇이 문제인지 모르겠습니다 ㅠㅠ

C6385 'matrix'에서 잘못된 데이터를 읽고 있습니다. 읽기 가능한 크기는 'sizeof(char *)*row'바이트인데 실제로는 '8'바이트만 읽을 수 있습니다.

이런 오류가 뜨는데 이것의 원인도 파악하지 못했습니다.. 무엇이 문제일까요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    scanf_s 를 사용하는 것을 보면, 비주얼 스튜디오 환경에서 작업하고 있을 거라고 생각합니다.

    이런 건, 브레이크포인트 걸어 놓고서, 디버깅 모드에서 디버거로 한줄한줄 실행하면서, 변수들의 값들 어떻게 바뀌는지, 메모리 어떻게 바뀌는지 확인해 보세요.

    이 기회에 디버거 사용법을 배우는 게, 누가 답을 알려주는 것 보다 앞으로 인생에 훨씬 도움이 될 겁니다. 비주얼 스튜디오 디버거 워낙에 친절하고 사용하기도 편해서, 그리 어렵지도 않을 거고요.

    • 오 넵 직접 알아보고 있는데 점점 윤곽이 잡힙니다..! 감사합니다! 배인석 2019.9.25 19:17

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)