2nd_Sem_Bogachev/2025.02.28/Linux/array.c
2025-03-02 14:38:34 +03:00

73 lines
No EOL
1.1 KiB
C

#include "array.h"
io_status read_array(char* a[], int n, const char * name)
{
char buf[LEN] = {0};
FILE *fp = 0;
int i, j;
if (!(fp = fopen(name, "r"))) return ERROR_OPEN;
for (i = 0; i < n; i++) {
if (!fgets(buf, sizeof(buf), fp))
{
fclose(fp);
free_array(a, i);
return ERROR_READ;
}
for (j = 0; buf[j]; j++)
{
if (buf[j] == '\n')
{
buf[j] = 0;
break;
}
}
a[i] = (char *)malloc((j+1) * sizeof(char));
if (!a[i])
{
fclose(fp);
free_array(a, i);
return ERROR_MEM;
}
strcpy(a[i], buf);
}
fclose(fp);
return SUCCESS;
}
void free_array(char ** a, int n)
{
int i;
for(i = 0; i < n; ++i)
{
if (a[i])
{
free(a[i]);
a[i] = 0;
}
}
}
void print_array(char ** a, int n, int m)
{
int l = (n > m ? m : n);
int i;
for (i = 0; i < l; ++i) printf("%s\n", a[i]);
}
int check(char **a, int n, int (*cmp)(const char *, const char *))
{
/* Каждый элемент больше следующего */
int i; int count = 0;
for (i = 1; i < n; i++)
{
if ((*cmp)(a[i-1], a[i]) > 0)
count++;
}
return count;
}