함수에서 문자열 포인터를 반환하는 방법에는 두 가지가 있다. 기본적인 선언 방법과 malloc 함수를 활용하는 방법이다.
▼ 차례대로 예시를 통해 이해해보자
●기본적인 선언 코드예제
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
char *Hello() //char 포인터를 반호나하는 Hello() 함수정의
{
char *string = "Hello"; //포인터에 문자열 "Hello"의 주소 저장
return string; //문자열 포인터 return
}
int main()
{
char *s1; //s1 문자열 포인터변수 선언
s1 = Hello();
printf(" Hello함수 return 값: %s\n", s1);
return 0;
}
▲소스 코드상에 입력한 문자열 리터럴은 실행 파일이 실행될 때 메모리에 저장되므로 함수가 종료되더라도 계속 사용할 수 있음(지역변수가 아닌 전역 변수 개념).
char *Hello() //char 포인터를 반호나하는 Hello() 함수정의
{
char *string = "Hello"; //포인터에 문자열 "Hello"의 주소 저장
return string; //문자열 포인터 return
}
▲위 부분을 밑의 코드와 비교해보자▼
#include <stdio.h>
int *five() // int 포인터를 반환하는 five 함수 정의
{
int num = 5; // num은 함수 five 함수가 끝나면 사라짐
return # // 함수에서 지역 변수의 주소를 반환하는 것은 잘못된 방법
}
두 번째 코드는 코드 전체에서 메모리 주소를 따로 생성하여 저장해주는 것이 아니라, five함수 내부에서 지역변수의 개념으로 작동하는 것이므로 오류가 발생한다. 무슨 말인지 모르겠다면 밑의 주소를 참조.
●malloc 함수를 활용하는 코드 예제
#define _CRT_SECURE_NO_WARNINGS // scanf보안 경고로 인한 컴파일 에러 방지
#include <stdio.h>
#include <stdlib.h> // malloc, free 함수 선언된 헤더파일
char *Hello() //char 포인터 반환하는 Hello함수 정의
{
char *string = malloc(sizeof(char) * 10); //char*10 크기만큼 동적 메모리할당
printf("문자열을 입력하세요:");
scanf("%s", string);
return string;
}
int main()
{
char *s1;
s1 = Hello();
printf(" Hello 함수 return 값: %s\n", s1);
free(s1); //동적메모리 해제
return 0;
}
char *string = malloc(sizeof(char) * 10); //char*10 크기만큼 동적 메모리할당
▲malloc 함수로 메모리를 할당해준다.
printf("문자열을 입력하세요:");
scanf("%s", string);
이후 string의 주소에 입력값을 대입한다.
s1 = Hello();
printf(" Hello 함수 return 값: %s\n", s1);
s1에 Hello()의 return 값 string(hello)를 대입
*참고내용
'프로그래밍 언어 > C' 카테고리의 다른 글
C언어 35강) 구조체와 구조체 포인터 반환 (0) | 2020.11.24 |
---|---|
C언어 34강) void 포인터 개념 및 void 포인터 반환 (2) | 2020.11.22 |
C언어 18강)+ 포인터 변수 선언 (0) | 2020.11.21 |
C언어 33강) 함수에서 포인터 반환하기 (0) | 2020.11.20 |
C언어 32강)+ 열거형(enum) switch문에 활용하기 (0) | 2020.11.18 |