본문 바로가기

C/개념

C에서 문자열 반환하는 함수 만들기

반응형
SMALL

프로그램을 짜다보면 문자열을 반환하는 함수를 만들어야 할 때가 있습니다.

 

사실 파이썬에선 문자열 반환이 간단한 편인데, C에서는 어떨까요?

 

어떤 형식으로 반환을 해야 문자열 반환이 가능할까요?

 

const char* string() {
	return "Hello World!";
}

int main(void) {
	printf("%s", string());
}

 

위와 같이 const char* 형식으로 반환을 하면 됩니다.

 

왜 그럴까요?

 

사실 c에서 문자열이라는 것은 char 데이터로 이루어진 배열을 뜻하게 됩니다. 그렇다면 그 문자열을 가리키는 주소값은 어떤 값을 가리키고 있을까요?

 

c에서 배열을 사용하는 것과 똑같은데, 바로 문자열 제일 처음을 가리키게 됩니다. 그렇게 되므로써 %s를 만나고 '\0' 값을 만날 때까지 출력이 되는겁니다.

 

즉, 문자열 포인터는 문자열 전체를 가리키는게 아닌 처음을 가리키는 것이죠.

 

그렇다면 우리는 리턴 값을 문자열 포인터로 넘긴 것이고, 그 포인터를 %s 입력값으로 출력을 하게 되면서, 'Hello World!' 문자를 출력할 수 있게 된 것입니다.

 

그렇다면 const는 무슨 의미일까요?

 

저희는 리턴 값을 "Hello World"라는 문자열을 두었습니다. 이 문자열은 저희가 변경할 수 없는 "상수"이기에 const라는 속성을 부여하게 된 것입니다.

 

그렇다면 const를 안 붙히려면 어떻게 하면 될까요?

 

아마 아래와 같이 하고 싶으실 겁니다.

#include <stdio.h>

char* string() {
	char str[50] = "Hello World!";
	return str;
}

int main(void) {
	printf("%s", string());
}

 

하지만 이렇게 해버리면 전혀 다른 값이 출력하게 됩니다.

 

그렇기에 저희는 정적 변수 선언 static을 같이 붙혀줘야 합니다.

#include <stdio.h>

char* string() {
	static char str[50] = "Hello World!";
	return str;
}

int main(void) {
	printf("%s", string());
}

그렇다면 여기선 또 왜 static을 붙히게 되었을까요?

 

static을 붙히지 않으면 char str[5] = "Hello World!"라는 값이 함수 내부에서만 scope를 가지게 됩니다. 즉, 함수를 빠져나오면서 저희가 부여한 value값을 잃어버리게 되는 것입니다.

 

따라서 static을 붙혀주게 되므로서, 값을 잃지 않고 유지를 해올 수 있습니다.

 

이 부분에 대해서 자세히 알고 싶으시면 전역 변수, 지역 변수, 정적 변수를 공부하시는 것을 추천드립니다.


아직 저도 C의 부족한 점이 많습니다. 혹시나 글에서 잘 못된 점을 발견하시면 댓글로 남겨주시길 바랍니다.

 

이상 C에서 문자열 반환하는 함수 만들기였습니다. ^_^

반응형
LIST