c언어 질문입니다

/*#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void hstrrev(char* str);

int main() {

	char str[100] = "program을 실행하기 전에 compile를 해야 한다.";

	puts(str);

	hstrrev(str);

	puts(str);

	return 0;
}

void hstrrev(char* str) {

	char* pstr;
	char* s = str;

	pstr = (char*)malloc(strlen(str) + 1);
	pstr = pstr + strlen(str);

	*pstr = NULL;
	pstr--;

	while (*s) {
		if (*s & 0x80) {
			*pstr-- = s[1];
			*pstr-- = s[0];
			s += 2;
		}
		else {
			*pstr-- = *s++;
		}
	}
	strcpy(str, pstr);
	free(pstr);
}*/
/*#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void hstrrev(char* str);

int main() {

	char str[100] = "program을 실행하기 전에 compile를 해야 한다.";

	puts(str);

	hstrrev(str);

	puts(str);

	return 0;
}

void hstrrev(char* str) {

	char* pstr, * p;
	char* s = str;

	pstr = (char*)malloc(strlen(str) + 1);
	p = pstr + strlen(s);

	*p-- = NULL;

	while (*s) {
		if (*s & 0x80) {
			*p-- = s[1];
			*p-- = s[0];
			s += 2;
		}
		else {
			*p-- = *s++;
		}
	}
	
	strcpy(str, pstr);
	free(pstr);
}
*/

위 두 코드의 차이점이 무엇인가요??

첫번째 코드는 에러가 나고 두번째 코드는 제대로 작동합니다.

안녕하세요~~

정확히 무엇을 하려는 코드인지는 모르겠지만,
free()는 malloc으로 받았던 값을 그대로 넘겨줘야해요.

그래서 아래 코드에서 p라는 다른 변수를 이용하고
free(pstr)을 실행한거랍니다. ㅎㅎㅎ

1 Like
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void hstrrev(char* str);

int main()
{
    char str[100] = "program을 실행하기 전에 compile를 해야 한다.";
    puts(str);
    hstrrev(str);
    puts(str);
    return 0;
}

void hstrrev(char* str)
{
    char* pstr;
    char* s = str;
    pstr = (char*)malloc(strlen(str) + 1);
    pstr = pstr + strlen(str);
    *pstr = NULL;
    pstr--;
    while (*s)
    {
	if (*s & 0x80)
        {
	    *pstr-- = s[1];
	    *pstr-- = s[0];
	    s += 2;
	}
	else
        {
	    *pstr-- = *s++;
        }
    }
     strcpy(str, pstr);
     free(pstr);
}

/*
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void hstrrev(char* str);

int main() {

char str[100] = "program을 실행하기 전에 compile를 해야 한다.";

puts(str);

hstrrev(str);

puts(str);

return 0;

}

void hstrrev(char* str) {

char* pstr, * p;
char* s = str;

pstr = (char*)malloc(strlen(str) + 1);
p = pstr + strlen(s);

*p-- = NULL;

while (*s) {
	if (*s & 0x80) {
		*p-- = s[1];
		*p-- = s[0];
		s += 2;
	}
	else {
		*p-- = *s++;
	}
}

strcpy(str, pstr);
free(pstr);

}
*/

코드를 ``` 로 감싸주시면 훨씬 답변하기 편하고 보기 좋읍니다. 다음 질문에서부터는 ```로 감싸주시면 감사하겠읍니다.

수정해드렸읍니다, , ,

루카스님 답변에 첨언. strcpy가 어디에서 어디로 복붙하는지도 확인해 보세용

늦었지만 답변 감사드립니다.