Dans ta fonction void initBuf(), tu devra, faire :
void initBuf(strBuf* buf,int capa)
{
buf = (strBuf *)malloc(sizeof(strBuf));
buf->debutchaine= (char *)malloc(capa*sizeof(strBuf)); //Allouer ce champs
buf->capa=capa;
}
le (strBuf *) avant le malloc c'est pour le caster. Parce que malloc te renvoie un pointeur de type void *, alors que toi tu veux un type strBuf * .
Après tu dois allouer le champs char* debutchaine, puis tu initialise le champs capa.
le probleme c'est que pour mettre bonjour tu devra le copier dans ta chaine après la création de la structure. Si tu veux mettre par exemple "bonjour" dés la crétion de cette structure tu devras faire ça:
void initBuf(strBuf* buf,int capa, char *ch) //ch est la chaine que tu veux mettre dans ta structure
{
buf = (strBuf *)malloc(sizeof(strBuf));
buf->debutchaine= (char *)malloc(capa*sizeof(strBuf)); //Allouer ce champs
if(capa==strlen(ch))
{
strcpy(buf->debutchaine, ch); //copie le contenu de ch dans le champs debutchaine
}
buf->capa=capa;
} //Et encore c'est pas très optimisé ^^, mais ça devrait aller.
Voilà
Par contre quand tu voudra rajouter un champs forcément tu devras le prendre en compte à chaque création.
Si tu veux avoir n structures de type strBuf* ( pour n > 1 ) tu devras mettre pour l'allocation:
buf = (strBuf *)malloc(n*sizeof(strBuf)); // en prenant soin d'avoir n en paramètre dans initBuf
Pour la libération, tu libère les champs AVANT de libérer la structure, afin d'éviter la fuite mémoire.
Voilà voilà
Si tu as d'autres questions 