728x90
• 로그로 데이터베이스 생서
* 구조체 배열을 반드시 이용할 것!!!
• 로그 데이터
데이터 베이스에는 user 와 password 정보만 저장할 것이다.
• 구조체 배열
struct success {
char username[100];
char password[100];
};
struct error {
char e_username[100];
char e_password[100];
};
success 와 error 구조체를 만들어 username, password를 저장할 배열을 생성한다.
• 로그 파일 열기
fp = fopen("C:\\Users\\user\\Desktop\\c과제\\c\\log.txt", "r");
if (fp == NULL) {
fprintf(stderr, "파일 없음");
exit(1);
}
while (fgets(str, sizeof(str), fp) != NULL) {
char* success = strstr(str, "SUCCESS");
char* error = strstr(str, "ERROR");
if (success != NULL) {
if (sscanf(str, "%*s %*s %s %s %*s", su[success_count].username, su[success_count].password) == 2) {
success_count++;
}
}
else if (error != NULL) {
if (sscanf(str, "%*s %*s %s %s %*s", er[error_count].e_username, er[error_count].e_password) == 2) {
error_count++;
}
}
}
fclose(fp);
log.txt 파일을 열어 해당 파일이 없으면 프로그램을 종료시킨다.
• 구주체 배열에 저장된 데이터 출력
printf("SUCCESS 데이터 개수: %d\n", success_count);
for (int i = 0; i < success_count; i++) {
printf("[+] -> Username: %s, Password: %s\n", su[i].username, su[i].password);
}
printf("ERROR 데이터 개수: %d\n", error_count);
for (int j = 0; j < error_count; j++) {
printf("[-] -> Username: %s, Password: %s\n", er[j].e_username, er[j].e_password);
}
• 메모리 할당
su = (struct success*)malloc(100 * sizeof(struct success));
if (su == NULL) {
fprintf(stderr, "메모리 할당 오류");
exit(1);
}
er = (struct error*)malloc(100 * sizeof(struct error));
if (er == NULL) {
fprintf(stderr, "메모리 할당 오류");
exit(1);
}
구조체에 사용자 이름과 비밀번호를 저장을 하기 위해서는 배열을 사용하기 전에 메모리를 할당하거나, 동적 배열을 사용해야한다.
동적으로 메모리 할당하기 위해 구조체 배열 포인터를 사용하고, malloc 함수를 사용해서 각각 100개의 struct sucess, error 크기만큼 메모리를 할당한다.
'S-DEV > C언어 마스터....' 카테고리의 다른 글
중첩 구조체를 이용한 로그인 프로그램 (0) | 2023.07.27 |
---|---|
Socket (0) | 2023.07.27 |
정규 표현식 구현 코드 (0) | 2023.07.27 |
strcpy 구현 (0) | 2023.07.19 |
int 배열과 char 배열의 차이점 (0) | 2023.07.19 |