개초보입니다.
제가 두개의 문자열(s1,s2)을 입력받은다음
두 문자열의 크기를 비교하여 큰 쪽을 s1에 넣는 함수를 만들고 싶은데여
일반적으로 int 형 자료를 비교해서 swap함수를 만들땐 포인터를 매개변수로 입력받잖아요(그냥 int a, int b 이렇게받고 바꿔버리면 함수가끝나고 다시 원래대로 돌아오므로)
그렇다면 문자열을 입력받을때는 문자열이름 자체가 주소값을 뜻하니까 더블포인터로 받아야 하나요?
void comp(char** s1, char** s2)
{
char* temp;
int n;
n=strcmp(*s1,*s2)
if(n<0)
{
temp = *s1;
*s1 = *s2;
*s2 = temp;
}
}
요런식으로 짜면 될까요??
자네도 미래의 치킨배달부인듯 싶네그려..
큰쪽을 s1에 넣는다는게 뭔 뜻이냐? 그리고 아직 포인터랑 메모리 할당 개념이 안잡혀있네.. 인수의 포인터 첨자도 * 하나만 찍어야지..
센스가 있으시네요.. 누구한테 배운건가요? 독학으로 생각하신거라면 C언어에 대한 센스는 학생치고는 뛰어나신듯
s1이나 s2에 대한 유효성 검사도 수행해주시는게 좋아요..
char** 쓰기 귀찮으니 PSTR* 이라고 쓸수도 있어요.. 그리고 본인이 저 comp함수 자체가 s1이나 s2의 값을 변경하지 않으니 PCSTR*이라고 하는게 가독성이 좋겠죠~ 코딩 스타일만 약간 아쉽네요~ C표준 스타일이 아니라서
C언어 잘 모르는 개발자들은 무조건 할당해야하는건지 알던데.. 실제 OS개발자나 드라이버 개발자는 메모리 할당하는 오버헤드도 아끼기위해서 저런식으로 많이들해요. 일반 응용프로그램은 저런식으로 안해도 다른곳에서 엄청난 오버헤드를 발생시키니 저렇게 하지도 않죠... 아무튼 저런 기법을 사용할때는 개발자가 주의해서 사용해야해요.
열심히 하시는듯
Windows 개열 개발자라면 void comp(__inout char** s1,__inout char** s2)과 같이 __inout 를 명시해주면 가독성이 향상됩니다.
답변들 진짜 감사합니다 ㅠㅠ 늦게나마 확인했는데 정말 큰도움 됐습니다. 프갤정말 좋네요 감사감사