6 Réponses :
Cela dépend si vous avez besoin de votre variable pour être temporaire ou non: Dans les deux cas, vous devez d'abord allouer votre structure pour pouvoir accéder à ses champs. P> p>
Vous pouvez écrire quelque chose comme ceci:
#define ARRAY_DIMENSION(a) (sizeof(a)/sizeof((a)[0])) void init_func(void) { struct thread_data arg_to_thread; int i; char buffer[100]; buffer[0] = '\0'; for ( i = 0; i < ARRAY_DIMENSION(arg_to_thread.incall); i ++ ) { /* Do something to properly fill in 'buffer' */ arg_to_thread.incall[i] = strdup(buffer); } }
Je pense
malloc (taille de (struct threadata)); code>
devrait fonctionner, n'est-ce pas? p>
Ceci est un cas où vous pourriez préférer calloc code> pour obtenir le comportement zéro ennuyeux car il définit les pointeurs en toute sécurité à NULL. Cela aide encore plus si vous pouvez également faire le numéro SYSCAlt à valeur zéro et SOKCKET quelque chose de sécurité.
Voici une autre possibilité. Il n'est pas clair pour moi ce que vous voulez que les valeurs initialisées puissent donc saisir un nombre de l'air, ce qui est presque certainement faux.
struct thread_data *td; int i; // allocate memory for the structure td = malloc( sizeof( struct thread_data )); // then allocate/initialize the char* pointers. It isn't clear // what you want in them ... pointers to existing data? Pre-allocated // buffer? This just allocates a fixed size buffer, for ( i = 0; i < sizeof( td->incall ) / sizeof( td->incall[0] ); i++ ) td->incall[i] = malloc( 42 );
L'initialisateur code> struct code> correspondant peut ressembler à ceci: alors vous pouvez affecter l'adresse de ceci à un pointeur: P> struct thread_data *b = &a;
Si cela se fait à l'intérieur d'une fonction, le * b code> se terminerait de pointer quelque part sur la pile une fois la fonction renvoie?
Oui, mais il est toujours de la responsabilité du programmeur de s'assurer qu'aucun pointeurs ne reste de pointe sur la mémoire du cadre de la pile une fois la fonction sort.
Voici la réponse à la question que je pense em> vous demandez: maintenant Vous pouvez affecter des chaînes à idéalement, vous souhaitez vérifier le résultat de chaque td-> incall code > Comme: p>
malloc code> pour vous assurer qu'il a été réussi avant de passer à la prochaine chose . p> p>
Ont donné une édition. J'ai probablement utilisé le mot "initialiser" de manière incorrecte. Cela aurait dû être "allouer" comme vous l'avez dit
Ce sont dix pointeurs à cordes, pas un pointeur à 10 chaînes. On dirait que tu deviens un peu en avance sur toi ...