Make pointer array also dynamic.
This commit is contained in:
1 parent
5de350b565
commit
1b8fecaad0
2 files changed
+22
-10
No files matched your search
@@ -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;
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
Reference in new issue
Block a user