
Ich habe in einem kleinen Projekt folgende Funktion gefunden:
Code: Alles auswählen
void MakeName (const char *txt, char *res)
{
Uint16 i;
for (i=0;i<strlen(RESOURCES);i++)
{
res[i] = RESOURCES[i];
}
for (i=strlen(RESOURCES);i<=strlen(RESOURCES)+strlen(txt);i++)
{
res[i] = txt[i-strlen(RESOURCES)];
}
}
Ich habe mir dann strcpy und strcat angeguckt, um dann zu lesen man solle lieber strlcpy und strlcat verwenden.
Jetzt verstehe ich aber den dritten Parameter von strlcpy und strlcat nicht.
In der Doku steht
und als BeispielThe strlcpy() function copies up to size - 1 characters from the NUL-terminated string src to dst, NUL-terminating NULterminating
terminating the result.
Code: Alles auswählen
strlcpy(buf, s, sizeof(buf));
strlcat(buf, p, sizeof(buf));
Außerdem gibt mir sizeof(res) immer 8 zurück.
Dadurch habe ich jetzt das Problem, dass das Ergebnis nicht vollständig ist.
Also ich habe jetzt folgenden Code:
Code: Alles auswählen
const char *RESOURCES = "";
char temp[256];
MakeName("arial.ttf", temp, RESOURCES);
void MakeName (const char *txt, char *res, const char *path)
{
strlcpy(res, path, sizeof(res));
strlcat(res, txt, sizeof(res));
printf("Read::MakeName - '%s' - '%s'\n", txt, res);
}
Code: Alles auswählen
Read::MakeName - 'arial.ttf' - 'arial.t'
Wo ist mein Denkfehler?