2017-04-20 5 views
0
int verify(char filename[], int filenameLength) // If f.ex. filename is "x.txt" then filenameLength is 5 
{ 
    char* filenameCorrect = malloc(sizeof(char) * (filenameLength + 9)); 
    filenameCorrect = "correct_"; 
    strcat(filenameCorrect, filename); 

    ... 
} 

Jedes Mal, wenn ich dies ausführen, bekomme ich diese Ausnahme: "Access violation Schreibort".Strcat() löst Zugriffsverletzung aus. Warum?

+6

'DateinameKorrektur =" Korrekt _ ";' -> 'strcpy (DateinameKorrektur," Korrekt _ ");' – BLUEPIXY

+1

Aus Sicherheitsgründen sollten Sie das Ergebnis von 'malloc' überprüfen, um zu sehen, ob Sie' NULL' erhalten zurück als Fehler – infixed

Antwort

3

filenameCorrect ist ein Zeiger, keine Variable, die die Zeichen enthält, sondern einen Zeiger auf einen Bereich im Speicher, dem die Zeichen zugewiesen wurden. In der zweiten Zeile weisen Sie filenameCorrect neu zu, um auf eine Zeichenfolge zu verweisen, die als Teil des Codes kompiliert wird und daher nicht den Fehler daher ändern kann.

Was Sie suchen, ist die Zeichenfolge "correct_" in den zugewiesenen Bereich im Speicher kopieren. Verwenden Sie also:

strcpy(filenameCorrect, "correct_"); 

dann können Sie sicher strcat verwenden.

Verwandte Themen