안녕하세요
2차원 포인터 자료형 질문이 있습니다
'*' 이나 '.' 의 경우 문자형임으로 2차원 포인터 배열 시
하기와 같이 char 자료형을 사용하고
char** matrix = malloc(sizeof(char*) * yArry);
for (int i = 0; i < yArry; i++)
{
matrix[i] = malloc(sizeof(char) * (xArry+1));
memset(matrix[i], 0, sizeof(char) * (xArry+1));
}
입력은 하기와 같이 문자열로 받게되는데요
for (int i = 0; i < yArry; i++)
{
scanf("%s", matrix[i]);
}
정수형 int를 사용하면 하기와 같이 값이 이상하게 들어가는데
이유가 있나요?
저의 생각으로는 하기와같이 포인터로 배열형을 만들면
char 는 1바이트, int는 4바이트 니까 저장 공간만 커지는게 아닌가
생각하고 있었는데 완전히 엉뚱한 값이 할당되는 이유가 궁금합니다.
메모리 공간이 커지면 따로 char+1만큼 따로 문자열의 null 공간을
따로 만들어주지 않아도 될꺼라고 생각했는데 전혀 다르네요
하기의 코드는 int자료형을 사용해서 배열을 지정해서 출력하게끔 하였습니다
char 와 int 배열의 차이점이 정확하게 어떻게되는건가요??
int** matrix = malloc(sizeof(int*) * yArry);
for (int i = 0; i < yArry; i++)
{
matrix[i] = malloc(sizeof(int) * xArry);
memset(matrix[i], 0, sizeof(int) * xArry);
}
for (int i = 0; i < yArry; i++)
{
for (int j = 0; j < xArry; j++)
{
scanf("%s", &matrix[i][j]);
}
}
답글 감사합니다
그런데 하기의 코드와 같이 하면 문자열로 입력할때
한칸씩 띄어서 쓰면 입력이 되고 출력도 기존의 정답과
동일하게 나오는데 잘못된 코드인가요?
int** matrix = malloc(sizeof(int*) * yArry);
for (int i = 0; i < yArry; i++)
{
matrix[i] = malloc(sizeof(int) * xArry);
memset(matrix[i], 0, sizeof(int) * xArry);
}
for (int i = 0; i < yArry; i++)
{
for (int j = 0; j < xArry; j++)
{
scanf("%s", &matrix[i][j]);
}
}
입력은 엔터 키를 눌렀을 때 끝납니다.
%s 문자열로 입력 받을 때 공백도 문자열의 일부입니다.
디버거로 값을 살펴보거나 printf로 출력해보면 이해할 수 있을 것입니다.