48 votes

Pourquoi "memset(arr, -1, sizeof(arr)/sizeof(int))" ne vide pas un tableau d'entiers à -1 ?

N'est-il pas possible d'utiliser memset sur un tableau d'entiers ? J'ai essayé ce qui suit memset et n'a pas obtenu les valeurs entières correctes dans le fichier int le tableau.

int arr[5];
memset (arr, -1, sizeof(arr)/sizeof(int));

Les valeurs que j'ai obtenues sont :

arr[0] = -1
arr[1] = 255
arr[2] = 0
arr[3] = 0
arr[4] = 0

1voto

kingo Points 31
void * memset ( void * ptr, int value, size_t num );

Cette fonction fonctionne bien sur la plupart des systèmes lorsqu'elle est appliquée à un tableau de caractères. Elle fixe le premier nombre de BYTES du bloc de mémoire pointé par ptr à la valeur spécifiée (interprétée comme un char non signé). memset-C++ Référence Il opère un octet à chaque fois. Il fonctionne donc bien si vous assignez aux seconds arguments une valeur int ne dépassant pas 0xff.

Quant à votre version, le troisième argument est le nombre d'éléments du tableau, donc vous avez obtenu votre résultat. En fait, la vérité est que vous êtes supposé assigner au troisième argument le nombre d'octets que vous voulez.

La version correcte devrait donc être la suivante :

memset (arr, -1, sizeof(arr));

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X