Dynarr 0.0.1
C dynamic array
Loading...
Searching...
No Matches
input_strings.c
Reading and sorting strings.

User prompted to enter strings until CTRL+D is pressed. Strings are delimited by newline or space, inserted into a dynarr_t in lexicographical ascending order. At the end of the input, program will print contents of the dynarr_t.

Author
Evgeni Semenov
#include "dynarr.h"
#include <stdio.h>
#include <string.h>
#define MAX_NAME_LEN 24
#define _STR(x) #x
#define STR(x) _STR(x)
typedef struct name
{
char data[MAX_NAME_LEN + 1];
}
name_t;
static int print_name(const void *const element, void *const param);
int main(void)
{
dynarr_t *dynarr;
name_t input_name = {0};
int entered = 0;
dynarr = dynarr_create(.element_size = sizeof(name_t));
if (!dynarr)
{
}
printf("Enter strings:\n");
do
{
printf("> ");
memset(input_name.data, 0, MAX_NAME_LEN + 1);
entered = scanf("%" STR(MAX_NAME_LEN) "s\n", input_name.data);
if ('\0' != input_name.data[0])
{
status = dynarr_binary_insert(&dynarr,
input_name.data,
cmp_lex_asc,
TMP_REF(int, MAX_NAME_LEN),
NULL);
}
if (DYNARR_SUCCESS != status)
{
dynarr_destroy(dynarr);
return status;
}
}
while (entered != EOF);
dynarr_foreach(dynarr, print_name, NULL);
dynarr_destroy(dynarr);
return 0; /* normal exit */
}
static int print_name(const void *const element, void *const param)
{
(void)param;
printf("%s\n", ((name_t*)element)->data);
return 0;
}
Describes dynarr public interface.
dynarr_status_t
Represents operation error codes.
Definition dynarr.h:43
@ DYNARR_ALLOC_ERROR
Success status inherited from VECTOR_ALLOC_ERROR.
Definition dynarr.h:45
@ DYNARR_SUCCESS
Success status inherited from VECTOR_SUCCESS.
Definition dynarr.h:44
int dynarr_foreach(const dynarr_t *const dynarr, const foreach_t func, void *const param)
Definition dynarr.c:506
dynarr_status_t dynarr_binary_insert(dynarr_t **const dynarr, const void *const value, const compare_t cmp, void *param, size_t *const index)
Binary insert.
Definition dynarr.c:323
#define dynarr_create(...)
Dynarr constructor.
Definition dynarr.h:81
void dynarr_destroy(dynarr_t *const dynarr)
Deallocates a dynamic array.
Definition dynarr.c:136
#define TMP_REF(type, value)