8
votes

C - Initialisation d'une matrice globale dans une fonction

J'ai un tableau que je veux faire globalement, et je veux initialiser dans un appel de la fonction. Je veux d'abord le déclarer sans savoir que sa taille: xxx

et ultérieure initialise: xxx

Comment puis-je faire cela? Je suis très nouveau à C et peut-être que je vais complètement le mauvais moyen, toute aide serait grandement appréciée.


0 commentaires

4 Réponses :


10
votes

Le moyen de le faire est avec malloc code>. D'abord déclarer juste un pointeur: xxx pré>

puis dans la fonction init vous masloc code> IT: p> xxx pré>

Ceci attribue taille_of_array code> éléments de la taille que STR code> pointe vers ( char code> dans ce cas). p>

Vous devez vérifier si l'allocation Échec de: P>

if (str == NULL) {
    // allocation failed
    // handle the error
}


2 commentaires

En C, vous ne devriez pas vraiment lancer le résultat de MALLOC - vous n'avez que vraiment besoin de le faire en C ++ - il devrait être évité en C tel qu'il peut masquer des avertissements serviants.


Si vous souhaitez être général, utilisez Tailleof (* str) , vous n'avez donc pas à répéter le nom de type. En outre, en C, vous ne devriez pas lancer le résultat de MALLOC.



1
votes
char* str;

str = (char*)malloc(size*sizeof(char));
You can skip the *sizeof(char) since sizeof(char) == 1 by definition.Don't forget to deallocate the memory using free

2 commentaires

Si vous souhaitez être général, utilisez Tailleof (* str) , vous n'avez donc pas à répéter le nom de type. En outre, en C, vous ne devriez pas lancer le résultat de MALLOC.


En C, vous ne devriez pas vraiment lancer le résultat de MALLOC - vous n'avez que vraiment besoin de le faire en C ++ - il devrait être évité en C tel qu'il peut masquer des avertissements serviants.



1
votes

Créer un Char * str; au lieu d'un tableau. Ensuite, allouez la quantité requise de la mémoire à l'aide de MALLOC ou de CALOCO et effectuez l'initialisation de la fonction appelée elle-même.


0 commentaires

3
votes

Faites de votre déclaration de tableau globale ressemblent à ceci: xxx

puis dans votre fonction d'initialisation fait quelque chose comme ceci: xxx


2 commentaires

Tailleof (Char) est 1 par définition. Si vous souhaitez écrire du code qui fonctionne avec n'importe quel type, utilisez Tailleof (* str) .


@BEN: TRUE, mais c'est une bonne habitude d'inclure le Tailleof quel que soit le type. Je suis bien conscient des arguments en faveur de tailleof (* str) mais je préfère toujours tailleof (char) dans cette instance.