Ich machte Code von Bob der Erbauer, es ist eine Struktur, jeder Bob der Erbauer hat Namen und zwei weitere Ganzzahlen (ist nicht wirklich wichtig). gibt es drei FunktionenStrukturen mit Zeigern falsch erhalten
die Struktur initialisiert werden (mit „bob“ und 0 und 3)
die zweite Funktion zwei Strukturen erhalten und es braucht ist zwischen diesen Strukturen zu kopieren
die dritte Funktion ist, die Namen (char *) jedes Bobs freizugeben.
Zunächst wird die zweite Funktion (Kopie) ging im Debuggen falsch, weil sie nicht den Namen kopiert haben (Ihre Hilfe brauchen bei der Analyse, warum es passiert ist) und zum anderen der Code abgestürzt in der freien Funktion. Kann mir jemand sagen, wie man Namen (char *) von Strukturen freigibt?
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LENGTH_OF_BOB 4
typedef struct bobTheBuilder
{
char* name;
int fixed;
int maxFix;
}bob;
//typedef struct bobTHeBuilder bob;
void deleteBob(bob currBob);
void initBob(bob *currBob);
void copyStruct(bob* dst, bob src);
int main(void)
{
bob currBob = {0,0,0};
bob secondBob;
initBob(&currBob);
copyStruct(&secondBob, currBob);
deleteBob(currBob);
deleteBob(secondBob);
system("PAUSE");
return 0;
}
/*
*/
void initBob(bob *currBob)
{
char* str = (char*)calloc(LENGTH_OF_BOB, sizeof(char));
char string[] = "bob";
if (str)
{
strcat(string, "\0");
str = string;
currBob->name = str;
currBob->fixed = 0;
currBob->maxFix = 3;
}
}
/*
*/
void deleteBob(bob currBob)
{
free(currBob.name);
}
void copyStruct(bob* dest, bob src)
{
dest->fixed = src.fixed;
dest->maxFix = src.maxFix;
dest->name = (char*)malloc(sizeof(char) *LENGTH_OF_BOB);
strncpy(dest->name, src.name, LENGTH_OF_BOB);
}
[Bitte sehen Sie diese Diskussion auf warum nicht zu c ast der Rückgabewert von 'malloc()' und Familie in 'C'.] (http://stackoverflow.com/q/605845/2173917). –
nur wenn du denkst, dass es nicht schlimmer werden kann, dann "strncpy" tritt dich in den Darm –
In der Tat. Google "warum ist strncpy unsicher?". – Lundin