프로그래밍 언어/C

C언어 33강)+ 함수에서 문자열 포인터 반환

happy_life 2020. 11. 21. 15:43

 

문자열 포인터 기본

 

C언어 18강)++ 포인터와 문자열/ 문자열 포인터에서 인덱스로 접근하기

C언어에는 문자열을 직접 선언하는 방법이 없다. 따라서 배열이나 포인터를 사용해 문자열을 처리한다. 배열을 사용해 문자열을 처리하는 방법은 abcdefgh123123.tistory.com/31?category=939526 C언어 10강

abcdefgh123123.tistory.com

 

함수에서 문자열 포인터를 반환하는 방법에는 두 가지가 있다.  기본적인 선언 방법과 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 &num;    // 함수에서 지역 변수의 주소를 반환하는 것은 잘못된 방법

} 

두 번째 코드는 코드 전체에서 메모리 주소를 따로 생성하여 저장해주는 것이 아니라, five함수 내부에서 지역변수의 개념으로 작동하는 것이므로 오류가 발생한다. 무슨 말인지 모르겠다면 밑의 주소를 참조.

함수 포인터 반환

 

C언어 33강) 함수에서 포인터 반환하기

함수 return 값으로 지금까지 1 , 3.3 등의 값을 가져왔다. 그렇다면 포인터(메모리 주소)를 return 하려면 어떻게 해야 할까? ●포인터 반환 함수 문법 반환값자료형 *함수이름() { return 반환값; } 코드

abcdefgh123123.tistory.com

 

 

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언어 24강) 문자열 포인터에 입력하기

전 강에서 배열 형태의 문자열에 사용자 입력값을 저장해보았다. 이번에는 문자열 포인터 안에 입력 값을 저장해보자. 문자열 포인터를 선언하고, scanf 함수로 문자열을 덮어쓰기 해주면 되지

abcdefgh123123.tistory.com