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 <string.h>
|
||||||
#include "namesarchive.h"
|
#include "namesarchive.h"
|
||||||
|
|
||||||
static char *names[MAX_NAMES];
|
static char **names = NULL;
|
||||||
static unsigned int numberOfNames = 0;
|
static unsigned int numberOfNames = 0;
|
||||||
|
|
||||||
static int findNameIdx(const char *name);
|
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.
|
// 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)
|
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);
|
names[numberOfNames] = malloc(sizeof(*name) * (strlen(name) + 1));
|
||||||
numberOfNames++;
|
|
||||||
return 1;
|
if(names[numberOfNames] == NULL)
|
||||||
|
{
|
||||||
|
names = realloc(names, sizeof(*names) * numberOfNames);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strncpy(names[numberOfNames], name, strlen(name)+1);
|
||||||
|
numberOfNames++;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -68,6 +80,7 @@ void removeNameByIdx(unsigned int idx)
|
|||||||
names[i-1] = names[i];
|
names[i-1] = names[i];
|
||||||
}
|
}
|
||||||
numberOfNames--;
|
numberOfNames--;
|
||||||
|
names = realloc(names, sizeof(*names) * numberOfNames);
|
||||||
}
|
}
|
||||||
|
|
||||||
int compareNames(const void *arg1, const void *arg2)
|
int compareNames(const void *arg1, const void *arg2)
|
||||||
@@ -99,5 +112,7 @@ void clearArchive()
|
|||||||
{
|
{
|
||||||
free(names[i]);
|
free(names[i]);
|
||||||
}
|
}
|
||||||
|
free(names);
|
||||||
|
names = NULL;
|
||||||
numberOfNames = 0;
|
numberOfNames = 0;
|
||||||
}
|
}
|
||||||
@@ -1,9 +1,6 @@
|
|||||||
#ifndef NAMEARCHIVE_H
|
#ifndef NAMEARCHIVE_H
|
||||||
#define 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.
|
// 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.
|
// 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);
|
int addName(const char *name);
|
||||||
|
|||||||
Reference in new issue
Block a user