문자열 fgets로 입력받아서 거꾸로 출력해주는 코드입니다.
1번과 2번 모두 동일한 기능을 수행할 것으로 기대하고 만들었는데, 1번은 작동하나, 2번은 경우에 따라서
작동하지 않습니다.
1번
int main(void)
{
char str[N];
fgets(str, N, stdin);
int len = strlen(str)-1;
for (int i = 0; i < len; i++)
{
printf("%c", str[len - i - 1]);
}
return 0;
}
2번
char* get_str(void)
{
char* str[N];
fgets(str, N, stdin);
return str;
}
void print_reverse(char* str_input)
{
int len = strlen(str_input)-1;
for (int i = 0; i < len; i++)
{
printf("%c", str_input[len - i - 1]);
}
}
int main()
{
char* original = get_str();
print_reverse(original);
return 0;
}
혹시 2번 코드에서 어떤 부분을 수정해야 정상적으로 돌아갈지 알려주실 분 계신가요
1. 문자열 할당X 2. 반환타입 잘못됨
아 에러가 뜬다는 의미는 아니었습니다.
아니 그니까 malloc을 써야지 char* str[N]-> (char*)malloc(N * sizeof(char)); 멀록 써서 동적 할당해야하는거 아님?
char *str; str = (char *)malloc(N);
2번의 get_str에서 str의 타입이 char*[] (char 포인터의 어레이)인 것도 이상하고, get_str이 지역변수를 반환하도록 짜놓은 것도 이상하구나. static 배열을 사용하거나, malloc을 통해 할당한 배열을 반환하도록 수정하시오
감사합니다. static, malloc 사용해서 해결했습니다. 두 방법 중 뭐가 더 좋은 방법인가요? (혹은 둘다 별로라던지)
static은 메모리 해체 필요없고, 프로그램 켜져있는동안 계속 되있음. 그래서 스레드 안전성 문제가 있음 malloc은 메모리를 동적 할당하고, 멀록은 니가 나중에 풀어줘야함. 안 그럼 메모리 누수가 있음 기본적으로 static이 더 사람 친화적이지만, 성능만 볼거면 malloc을 써야함
앞으로 malloc free 위주로 해야겠네요 감사합니다