Oluşturucunun bob kodunu yaptım, bu yapı, her bob yapıcının adı ve iki tam sayı daha var (gerçekten önemli değil). Üç fonksiyonları İşaretçileri kullanarak yapıları yanlış olsun
yapı başlatmak
vardır ("bob" ve 0 ile ve 3)İkinci fonksiyon iki yapılarını almak ve bu yapılar arasında kopyalamak için ihtiyacı var
üçüncü Fonksiyon her bob'un isimlerini (char *) serbest bırakmaktır.
Öncelikle, ikinci fonksiyon (kopya) (neden oldu analizinde yardımına ihtiyacım) o isim kopyalamak çünkü hata ayıklama yanlış gitti ve ikinci olarak, kod serbest fonksiyonu düştü. Birisi bana yapıların isimlerini (char *) nasıl serbest bırakabileceğini söyleyebilir mi? initBob
yılında
#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);
}
[bu tartışma üzerine bakın neden c değil malloc() 've ailesinin' C' cinsinden dönüş değeri. (http://stackoverflow.com/q/605845/2173917). –
sadece daha kötüye gidemeyeceğini düşündüğünüz zaman, 'strncpy' sizi –
bağırsaklarına atıyor. Google "neden strncpy güvensiz" dir. – Lundin