fonction memset en langage c

j'étudie la fonction memset maintenant, mais tous les exemples concernent le tableau de char comme suit:

char a[100];
memset(a, 0, 100);

il positionnera tous les éléments de ce tableau de char à 0.

je me suis demandé si memset peut s'appliquer au tableau int ou au tableau float?

16
demandé sur Jason 2011-07-25 16:54:17

3 réponses

Oui, il peut s'appliquer à n'importe quelle mémoire tampon, mais vous devez entrer la taille correcte de mémoire tampon ... memset traite n'importe quel tampon mémoire comme une série d'octets, donc si c'est char, int,float,double, etc, n'a pas vraiment d'importance. Gardez à l'esprit cependant qu'il ne va pas fixer les types de multi-octets à une valeur non-zéro spécifique ... par exemple:

int a[100];
memset(a, 1, sizeof(a));

définir chaque membre de a à la valeur 1 ... ça va plutôt set tous les octet dans le tampon mémoire pris par a1, ce qui signifie Tous les quatre octets int sera défini à la valeur 0x01010101, qui n'est pas le même que 0x00000001

42
répondu Jason 2011-07-25 13:01:26

pour les tableaux de taille statique et de longueur variable, vous pouvez juste

<arbitrary-type>  foo [...];
memset (foo, 0, sizeof (foo)); // sizeof() gives size of entity in bytes



Règle de base: Jamais coder en dur [tailles de données].



(cela ne fonctionne pas si vous passez des tableaux comme arguments de fonction: comportement de la taille en C)

1
répondu Sebastian Mach 2017-05-23 11:54:57

Il peut être appliqué à n'importe quel tableau. L'100 à la fin est la taille en octets, donc un entier de 4 octets chacun, de sorte qu'il serait -

int a[100];
memset(a, 0, sizeof(a)); //sizeof(a) equals 400 bytes in this instance

l'Obtenir? :)

1
répondu John Humphreys - w00te 2011-07-25 13:32:35