Ihre Frage ist nicht klar, da der Code wenig oder keinen Sinn ergibt. Ihre Eingabe darf nicht länger als 20 Zeichen sein, da das Empfangsarray nur 20 Zeichen enthält. Wenn der Benutzer mehr eingibt, wird Ihr Programm ein undefiniertes Verhalten aufweisen. Das Hauptproblem hier ist also nicht die Begrenzung des Kopierens, sondern die Begrenzung der Eingabe.
Ihre Frage scheint jedoch auf das Kopieren von Zeichenfolgen mit begrenzter Länge abzuzielen. Wenn das ist, was Sie benötigen, gibt es leider keine dedizierte Funktion in der Standardbibliothek für diesen Zweck. Viele Implementierungen bieten die nicht standardmäßige Funktion strlcpy
an, die genau das tut. Überprüfen Sie also entweder, ob Ihre Implementierung strlcpy
bereitstellt, oder implementieren Sie Ihre eigene strlcpy
.
In vielen Fällen sehen Sie vielleicht Ratschläge, strncpy
in solchen Fällen zu verwenden. Obwohl es möglich ist, strncpy
dazu zu bringen, für diesen Zweck zu funktionieren, ist strncpy
in Wirklichkeit nicht dafür gedacht, auf diese Weise verwendet zu werden. Die Verwendung von strncpy
als Kopierfunktion für Zeichenfolgen mit begrenzter Länge ist immer ein Fehler. Vermeiden Sie es.
1 Stimmen
Was soll das bedeuten?
copy
ist überhaupt kein Array.array
ist 20 Zeichen lang.array
kann einfach nicht länger als 20 Zeichen sein.0 Stimmen
Du bekommst Overflow mit scanf, wenn du mehr als 20 Bytes eingibst. Schau dir fgets an.
0 Stimmen
@James strncpy beendet das Ergebnis nicht unbedingt mit einem NUL -- fast nie das, was man möchte (der ursprüngliche Zweck war das Kopieren von UNIX-Verzeichniseinträgen, die 14 Bytes lang waren und mit einem NUL abgeschlossen wurden, wenn sie kürzer waren). In jedem Fall ist es hier nicht anwendbar.