[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 답변
-
scanf_s
를 사용하는 것을 보면, 비주얼 스튜디오 환경에서 작업하고 있을 거라고 생각합니다.이런 건, 브레이크포인트 걸어 놓고서, 디버깅 모드에서 디버거로 한줄한줄 실행하면서, 변수들의 값들 어떻게 바뀌는지, 메모리 어떻게 바뀌는지 확인해 보세요.
이 기회에 디버거 사용법을 배우는 게, 누가 답을 알려주는 것 보다 앞으로 인생에 훨씬 도움이 될 겁니다. 비주얼 스튜디오 디버거 워낙에 친절하고 사용하기도 편해서, 그리 어렵지도 않을 거고요.
댓글 입력