ysh2328   2년 전

괜히 2차원배열로 까불고있는데 질문 드립니다 ㅠㅠ

이렇게 풀어 본 이유는 입력 다 받고 출력하는 형식으로도 풀어보고 싶어서 그랬습니다.

결과는 잘 나오는데 채점하면 틀렸다고 나오네요.

추정하는건 초기화 문제인거같은데 malloc을 calloc로 바꿔보고, length확인용 배열을 for문 안으로 집어넣어서 초기화 해봐도 계속 틀렸다고하네요..

부탁드립니다 ㅠㅠ

lcr7324   2년 전

1) 우선 "틀렸습니다"의 근본적인 원인은 11번 줄에 있습니다.

string = (char**)malloc(sizeof(char) * n); // 틀린 부분

string = (char**)malloc(sizeof(char*) * n); // 이렇게 고칩시다

string[i]char*형으로 쓰여질 예정이니, 최초의 동적 할당 또한 이에 맞추어야 합니다. 컴파일러나 실행 환경에 따라 다를 수 있지만 기본적으로 sizeof(char)는 1byte 인데 sizeof(char*)는 4byte 또는 8byte이기 때문에 문제가 발생하게 됩니다.

아래부터는 정답 유무와는 상관 없지만 참고하면 좋을 내용입니다.

2) 23번 줄에서 string[i]에 동적 할당을 해주고 24번 줄에서 이를 input로 갈아끼워주는데, 이렇게 하면 23번 줄의 동적 할당은 아무런 의미가 없어집니다.

3) malloc 함수는 stdlib.h 헤더에 선언되어 있고, strlen 함수는 string.h 헤더에 선언되어 있으니 두 헤더를 include해주는 것이 좋습니다.

ysh2328   2년 전

@lcr7324 감사합니다!!!! 이거때문에 두세시간잡고있던거 생각하니 눈물이나네요..

23번줄을 주석처리해도 똑같이 동작하는 것 확인하였습니다.

input을 초기화 하지도 않은것도 문제라고 생각했는데 input의 length가 입력한 값대로 나오네요 ㄷㄷ

djm03178   2년 전

input은 초기화하지 않아도 됩니다. 문자열의 끝은 널 문자로 표시되고, 이는 scanf가 입력받을 때 알아서 넣어주므로 배열의 처음부터 널 문자까지는 쓰레기값 없이 올바르게 값을 가진 상태가 됩니다.

댓글을 작성하려면 로그인해야 합니다.