C언어

반환값으로 문자열을 반환하는 함수 만들기

joo_coding 2025. 4. 5. 20:00

 

구조체 안에 있는 배열에 값을 할당할 때 직접대입하면 안되고 strcpy로 넣어주어야 한다 

 

 

메일 프로그램에서 유저찾기 기능을 구현하던 중

user_pick 1과 2가 초반에 유저에게 입력받는 부분이 동일해서 함수로 만들고 싶었다.

우선 해당 함수의 반환값이 문자열이고,

그 반환값을 메인에 있는 문자열 변수로 받아줘야 한다고 생각했다. 

 

그렇다면 문자열을 반환하는 함수는 어떻게 만들까?

구글링 해보니 반환값의 형식은 const char* 이라고 한다.

char형 포인터인 이유는 배열의 경우 배열이름 자체가 포인터이기 때문이다!!

앞에 상수가 붙는 이유는 해당 함수에서 만들어진 문자열은 길이가 고정되어있기 때문이다.

 

const char* f_user_input()
{
    char *user_input;
    printf("찾으실 이름을 입력하세요.\n");
    printf("입력: ");
    scanf("%s", &user_input);

    return user_input;
}

 

user_input에 유저가 입력한 이름의 주소를 저장하고

user_input을 반환한다. = 즉 포인터를 반환한다.

 

    char *user_want_find; // 유저가 찾고자하는 이름or아이디

    while (1)
    {
    	//코드 생략//
    
		if (user_pick == 1) // strncmp
        {
            printf("1)아이디로 찾기\n");
            user_want_find = f_user_input(); // 포인터를 반환받음
            printf("유저의 입력: %s\n", &user_want_find);
        }

 

그러면 메인함수에서의 사용은 이러하다.

user_want_find 에 함수의 반환값인 포인터를 저장한다.

그리고 포인터에 저장된 주소로 접근해서 값을 보려면 &가 필요하다.


 

이제 입력받은것을 회원정보 파일과 비교해서 같은지 확인해야한다.

 

찾아보니 strcmp가 아주 적절할 것 같다.

 

 헤더파일

C언어 : <string.h>

C++ : <cstring>

 

 정의

int strcmp(const char* str1, const char* str2)

int strncmp(const char* str1, const char* str2, size_t n);

 

 strcmp 함수 매개변수 설명

첫번째 매개변수 str1 : 비교할 문자열1

두번재 매개변수 str2 : 비교할 문자열2

 

strncmp 함수 매개변수 설명

첫번째 매개변수 str1 : 비교할 문자열1

두번재 매개변수 str2 : 비교할 문자열2

세번째 매개변수 n : 비교할 문자열 길이  

 

(1) str1 < str2 인 경우에는 음수 반환

(2) str1 > str2 인 경우에는 양수 반환

(3) str1 == str2 인 경우에는 0을 반환 합니다.

출처: https://blockdmask.tistory.com/391 [가면 뒤의 기록:티스토리]

 

이름은 정확해야하니 strcmp를,

아이디는 일부만 맞으면되니 strncmp를 쓰면 될거같다. ( 회원정보 리스트, 유저가 입력한 글자, 유저가 입력한 글자의 길이 )

 

그나저나

// 아이디로 찾은 회원정보 출력 함수 (여러명)
// 이름으로 찾은 회원정보 출력 함수 (1명)

이렇게 출력하면 되겠다 생각했는데, 생각해보니 동명이인이 있어도 여러개를 출력해야겠구나 싶어서

굳이 출력함수를 2가지로 나누지않아도 되겠다고 생각했다.

 

//찾은 회원정보 출력 함수 로 정정!