Also habe ich einige C-Code bekam:Warum löst Strcpy einen Segmentierungsfehler mit globalen Variablen aus?
#include <stdio.h>
#include <string.h>
/* putting one of the "char*"s here causes a segfault */
void main() {
char* path = "/temp";
char* temp;
strcpy(temp, path);
}
Dies kompiliert, läuft, und verhält sich, wie es aussieht. Wenn jedoch einer oder beide Zeichenzeiger als globale Variable deklariert sind, führt strcpy zu einem Segmentierungsfehler. Warum passiert das? Offensichtlich gibt es einen Fehler in meinem Verständnis von Umfang.
Da ich glaube nicht, dass es das Problem lösen wird, werde ich nur kommentieren, dass Strncpy über Strcpy empfohlen wird. –
Josh Gagnon: Strncpy platziert tatsächlich keinen Null-Terminator, wenn die Länge der Eingabestring> = der Puffer ist. strcpy ist vollkommen sicher, wenn Sie wissen, dass der Puffer groß genug ist. Verwenden Sie andernfalls 'snprintf (buffer, buffer_len,"% s ", src)', da snprintf immer einen Null-Terminator eingibt (stellen Sie nur sicher, dass buffer_len> 0 ist). –
@Josh: Ich bevorzuge 'strlcpy'. Leider unterstützt glibc es nicht, so dass ich keine Chance bekomme, es zu benutzen. Ich nehme an, ich könnte immer meine eigene Implementierung rollen und sie zu meiner persönlichen Header-Bibliothek von Null-Überprüfung malloc und dateibezogenen Funktionen hinzufügen, aber es ärgert mich immer noch, dass viele Versionen von Unix es haben, während Linux das normalerweise nicht tut. – JAB