[C] 연습으로 만들었는데, 계속 고민해봐도 왜 output이 이렇게 나오는지 모르겠어요. 쉬우시겠지만 조금 봐주세요.
조회수 660회
#include <stdio.h>
#include <stdlib.h>
char *Mystrrev(char *string) {
char *NewStr = NULL;
int count = 0;
for (int i = 0; string[i] != '\0'; i++) count++;
NewStr = (char*)calloc(count, sizeof(char));
for(int j = 0; count > 0; j++){
NewStr[j] = string[count];
count--;
}
free(NewStr);
return NewStr;
}
int main(void) {
char *str[3] = { "Hello", "World", "String" };
char* *ppstr = str;
puts(Mystrrev(ppstr[1]));
}
안녕하세요! 혼자 책으로 공부하면서 만들어 본거예요! 정말 과제아니구
이게 에러도, 출력도 아무것도 안떠요. (정상적으로 작동은! 되요)
이 문제의 다른 분이 만드신 코드도 보긴 했지만 저는 이게 왜 안되는지 짚고 넘어가야될거 같은데
혼자 끙끙 앓고만 있고 진도가 도저히 안넘어가서 질문합니다.
(문제는 strrev( ) 함수랑 동일한 기능을 수행할수 있는 MyStrrev( ) 함수를 만들라는 거예요! )
감사합니다!!
-
(•́ ✖ •̀)
알 수 없는 사용자 - 〉
2 답변
-
아래 코드 참고하세요.
- 코드
#include <stdio.h> #include <stdlib.h> char* Mystrrev(char* string) { char* NewStr = NULL; int count = 0; for (int i = 0; string[i] != '\0'; i++) count++; NewStr = (char*)calloc(count + 1, sizeof(char)); if (NewStr != NULL) { for (int j = 0; j < count; j++) { NewStr[j] = string[count - 1 - j]; } NewStr[count] = '\0'; } return NewStr; } int main(void) { char* p = NULL; char* str[3] = { "Hello", "World", "String" }; char** ppstr = str; puts(ppstr[1]); p = Mystrrev(ppstr[1]); puts(p); free(p); p = NULL; }
- 결과
-
(•́ ✖ •̀)
알 수 없는 사용자
- 답변 감사합니다!! 저 혹시 p를 메모리 할당 해제하셨는데 이유가 무엇인가요? Newstr를 해제하려면 그렇게 해야되는건가요?? 알 수 없는 사용자 2020.9.12 17:44
- 동적할당 받은 메모리를 더이상 사용하지 않을 것이라고 생각한 시점에서 free로 해제해야 합니다. 더 사용할 생각이라면 해제 안하셔도 됩니다. 알 수 없는 사용자 2020.9.12 19:46
-
댓글 입력