Moin.
Hier stecken zwei Fehler:
strncpy(m->bezeichnung, s, MAX_BEZ);
strncpy(m->zusatzinfo, s, MAX_INFO);
strncpy()
schreibt *immer* soviele Zeichen wie angegeben in den Ziel-buffer: ist der Quell-string zu kurz, wird mit Nullen aufgefüllt.
Da du aber falls die string-Längen kleiner als die Maximallängen sind weniger Speicher allozierst, erzeugt der Aufruf einen buffer overflow.
Mit folgenden Funktionen läuft das Programm bei mir problemlos durch:
#include <assert.h>
void setMetaDataBezeichnung(struct metadata *m, const char *s)
{
size_t len = strlen(s);
if(len > MAX_BEZ) len = MAX_BEZ;
m->bezeichnung = malloc(len + 1);
assert(m->bezeichnung);
memcpy(m->bezeichnung, s, len);
m->bezeichnung[len] = 0;
}
void setMetaDataZusatzInfo(struct metadata *m, const char *s)
{
size_t len = strlen(s);
if(len > MAX_INFO) len = MAX_INFO;
m->zusatzinfo = malloc(len + 1);
assert(m->zusatzinfo);
memcpy(m->zusatzinfo, s, len);
m->zusatzinfo[len] = 0;
}
Christoph