반환값으로 문자열을 반환하는 함수 만들기
구조체 안에 있는 배열에 값을 할당할 때 직접대입하면 안되고 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가지로 나누지않아도 되겠다고 생각했다.
//찾은 회원정보 출력 함수 로 정정!