게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
C에서 text파일에 입력된 이차원 배열 읽어오기 질문 좀;;
게시물ID : programmer_21049짧은주소 복사하기
작성자 : arken
추천 : 0
조회수 : 3551회
댓글수 : 12개
등록시간 : 2017/07/18 16:47:52
옵션
  • 본인삭제금지
75
95 64
17 47 82
18 35 87 10
20 04 82 47 65
19 01 23 75 03 34
88 02 77 73 07 63 67
99 65 04 28 06 16 70 92
41 41 26 56 83 40 80 70 33
41 48 72 33 47 32 37 16 94 29
53 71 44 65 25 43 91 52 97 51 14
70 11 33 28 77 73 17 78 39 68 17 57
91 71 52 38 17 14 91 43 58 50 27 29 48
63 66 04 68 89 53 67 30 73 16 69 87 40 31
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23

이런타입의 배열을 불러오는데, 제가 아래 처럼 코드를 만들었습니다.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
// 이중포인터 2개. 첫번째는 문자열로 저장할 용도, 두번째는 문자열을 숫자열로 바꿔서 입력할 용도.
//end 문자열 잘라서 숫자로 넣을때 임시로 사용할 용도. 15X15 행렬
char **triangularArray = malloc(sizeof(char *) * 15);
int **triangularArray2 = malloc(sizeof(int *) * 15);
char *end;

//이중포인터에 배정할 포인터들 15개의 숫자를 넣을 예정이기 때문에 문자열은 16개(마지막 NULL포함)
//숫자열은 15개 배정한 후 memset으로 초기화.
for (int i = 0; i < 15; i++)
{
triangularArray[i] = malloc(sizeof(int) * 16);
triangularArray2[i] = malloc(sizeof(int) * 15);
memset(triangularArray2, 0, 15);
}

//text파일 Problem18.txt을 부러온후 fopen이용해 파일 포인터로 저장
FILE *Triangular = fopen("Problem18.txt", "r");

//fgets를 이용해 파일 포인터에 있는 i번째 줄을 문자열 포인터 triangularArray[i]에 저장. 255는 최대용량임.
for (int i = 0; i < 15; i++)
{
fgets(triangularArray[i], 255, Triangular);
triangularArray[i][15] = '0';

printf("%s\n", triangularArray[i]);
}
//fclose를 이용해 파일 포인터 닫아줌. free같은 역할
fclose(Triangular);

//strtol 이용해 triangularArray[i] 문자열을 숫자열로 바꿔서 triangularArray2[i]에 한땀한땀 넣어줌.
//for 문의 첫번째 줄은 triangularArray[i] 불러와 첫 숫자를 짤라서 넣은후 남은 문자열을 end 포인터에 저장.
for (int i = 0; i< 15; i++)
{
triangularArray2[i][0] = strtol(triangularArray[i], &end, 10);
//end에 저장된 문자열을 차례대로 숫자열로 바꿔서 j=2,...13까지 저장.
//다 할 필요있나??;;
for (int j = 1; j < 15; j++)
{
triangularArray2[i][j] = strtol(end, &end, 10);
}
}

//free 이용해 사용한 메모리들 다 반환. for (int i = 0; i < 15; i++) { free(triangularArray[i]); free(triangularArray2[i]); } free(triangularArray); free(triangularArray2); return 0; }


그런데 실행 시키면 자꾸 에러가 나오는군요ㅠㅠ 갑갑해서 디버깅 실행시키니,
for 안의 triangularArray2[i][0] 정의 부분을 가르키며
"예외 발생(0x0022502F, ProjectEuler2.exe): 0xC0000005: 0x00000000 위치를 기록하는 동안 액세스 위반이 발생했습니다.."
이런 에러가 뜨는데 도무지 이유를 모르겟습니다. ㅠㅠ

혹시 이유 혹은 해결책 아시는분 댓글로 알려주시면 감사하겠습니다. 

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호