Ich dachte daran, eine Strenge Alternative mit dem Beenden von '\ 0' für meine eigene Verwendung in einer Header-Datei zu machen, und frage mich, welche der folgenden Ansätze besser wäre.strncpy() Alternative - welche Vorteile für jede Version?
int copystring(char *dest,char *source,int elements)
{
int run;
for(run=0;run<elements-1;run++)//last reserved for'\0'
{
dest[run]=source [run];
if (dest[run]=='\0')
{
break;
}
}
dest[elements-1]='\0';//could make conditional but not neccesary.
return 0;
}
ODER
int copystring(char *dest,char *source,int elements)
{
strncpy(dest,source,elements-1);
dest[elements-1]='\0';
return 0;
}
Der offensichtliche Unterschied für mich ist, dass ich rufe eine weniger Funktion mit der Version, aber ich frage mich, ob Version zwei irgendwelche Vorteile hat, wie ich weiß nicht, die internen arbeiten von strncpy()
Als beiseite, warum nimmt strncpy() size_t als das letzte Argument? Wenn es um die Weitergabe von Werten geht, die nur in sehr begrenzten Situationen nützlich sein werden, würde ein Int nicht genauso gut funktionieren?
Was ist das Erreichen dass 'strcopy' bieten nicht schon? Zusätzlich, warum brauchen Sie die Länge einer 'char * Quelle mit Null-Ende' um es zu kopieren? – CollinD
Es hat Pufferüberlaufschutz für das Ziel. Ich werde 'Elemente' verwenden, um die maximale Ziellänge zu übergeben. – Orangesandlemons
BTW: 'dest [run + 1] = '\ 0';' - >> 'dest [run] = '\ 0';' (run wird bereits nach der Schleife inkrementiert) – wildplasser