Make pointer array also dynamic.

This commit is contained in:
paulusja committed 2026-11-05 11:14:26 +01:00
1 parent 5de350b565
commit 1b8fecaad0
2 files changed
+22 -10

No files matched your search

+22 -7
View File
@@ -3,7 +3,7 @@
#include <string.h>
#include "namesarchive.h"
static char *names[MAX_NAMES];
static char **names = NULL;
static unsigned int numberOfNames = 0;
static int findNameIdx(const char *name);
@@ -14,15 +14,27 @@ static int compareNames(const void *arg1, const void *arg2);
// Ist der angegebene Name länger als die zulässige Namenslänge, wird der Name abgeschnitten hinzugefügt. Rückgabe ist dann 1.
int addName(const char *name)
{
if(name != NULL && numberOfNames < MAX_NAMES)
if(name != NULL)
{
names[numberOfNames] = malloc(sizeof(*name) * (strlen(name) + 1));
char **oldMemory = names;
names = realloc(names, sizeof(*names) * (numberOfNames + 1));
if(names[numberOfNames] != NULL)
if(names == NULL)
names = oldMemory;
else
{
strncpy(names[numberOfNames], name, strlen(name)+1);
numberOfNames++;
return 1;
names[numberOfNames] = malloc(sizeof(*name) * (strlen(name) + 1));
if(names[numberOfNames] == NULL)
{
names = realloc(names, sizeof(*names) * numberOfNames);
}
else
{
strncpy(names[numberOfNames], name, strlen(name)+1);
numberOfNames++;
return 1;
}
}
}
return 0;
@@ -68,6 +80,7 @@ void removeNameByIdx(unsigned int idx)
names[i-1] = names[i];
}
numberOfNames--;
names = realloc(names, sizeof(*names) * numberOfNames);
}
int compareNames(const void *arg1, const void *arg2)
@@ -99,5 +112,7 @@ void clearArchive()
{
free(names[i]);
}
free(names);
names = NULL;
numberOfNames = 0;
}
-3
View File
@@ -1,9 +1,6 @@
#ifndef NAMEARCHIVE_H
#define NAMEARCHIVE_H
// Maximale Anzahl an Namen
#define MAX_NAMES 100
// Fügt einen Namen hinzu. Im Fehlerfall (Archiv ist voll) soll 0, ansonsten 1 zurückgegeben werden.
// Ist der angegebene Name länger als die zulässige Namenslänge, wird der Name abgeschnitten hinzugefügt. Rückgabe ist dann 1.
int addName(const char *name);