모두의 코드 커뮤니티

C언어 구조체 배열 질문 있습니다!

16-2 문제 1번의 (이전에 만든)도서 관리 프로그램을만들되,구조체를 이용해 봅시다. 또한 register_book 과 같은 함수를 이용하여 책을 등록해봅시다. (난이도 : 下)
를 하다가 궁금한 점이 생겼습니다.

#include <stdio.h>

struct books {
	char name[30];
	char author[30];
	char publisher[30];
	int rentable;
};

int addBook(struct books* book, int* bookCount);

int main() {
	struct books book[100];
	int bookCount = 0;
	int userSelect = 0;

	while (1) {
		printf("\n-------------------------------------- \n");
		printf("도서관리 프로그램입니다. \n");
		printf("1. 도서 추가 \n");
		printf("2. 도서 검색 \n");
		printf("3. 도서 대여 \n");
		printf("4. 도서 반납 \n");
		printf("0. 프로그램 종료 \n");
		printf("\n원하시는 기능의 번호를 입력해주세요. \n");
		scanf_s("%d", &userSelect);

		switch (userSelect)
		{
		case 0:
			printf("프로그램을 종료합니다. \n");
			return 0;
		case 1:
			addBook(&book[bookCount], &bookCount);
			break;

		......(생략)
}

int addBook(struct books* book, int* bookCount) {
	printf("도서를 추가합니다. \n");

	/* 도서명, 저자, 출판사 입력 */
	printf("도서명을 입력하세요. ");
	scanf_s("%s", book->name, sizeof(book->name));

	......(생략)
}

구조체 배열을 함수의 매개변수로 넘길 때 2가지 방법이 있는 것 같더라구요.

addBook(struct books* book…) 으로 구조체 배열을 함수의 인자로 받는다고 했을 때

  1. main문에서 addBook(&book[bookCount]…) 같은 식으로 배열 index를 입력해서 함수에서 book->name같은 식으로 쓰는거랑
  2. main문에서 addBook(&book…)으로 넘겨, 함수에서 (book + *bookCount)->name 이런식으로 쓰는거랑 어떤게 맞는건가요? 혹은 둘 다 사용해도 상관없는걸까요?

또 다른 한가지는 scanf_s로 사용자의 문자열 입력 값을 받을 때

  1. scanf_s("%s", book->name, sizeof(book->name)); 와 같이 한번에 받아도 되는건가요?
  2. 아니면 예제의 문자열을 복사하는 함수(copy_str)를 써서 값을 넣어야하나요?
    1번과 같은 방식으로 했는데 의문점이 들어 질문드립니다…

++ 항상 강의 잘 보고 있습니다. 정말정말정말 감사합니다.