Memset
Résolu
Theo_0055
Messages postés
273
Date d'inscription
Statut
Membre
Dernière intervention
-
Theo_0055 Messages postés 273 Date d'inscription Statut Membre Dernière intervention -
Theo_0055 Messages postés 273 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je comprends le fonctionnement général de
Par exemple :
1. Pourquoi faire tab[0] aulieu de par exemple sizeof(int)*4?
2. Comment savoir ce qu’il y a dans tab[0] vu que on a rien mis encore dans notre tableau
3. Pourquoi aussi lorsqu’on change le 0 par un 10 on obtient des n’ombres bizarres
Moi je pensais que ça allait remplir les 4 premières cases du tableau avec 10 mais apparemment non
Pourtant si on avait mis 0, ça allait mettre des 0.
Je comprends le fonctionnement général de
memsetsauf les trucs concernant les entiers avec les bytes et autres.
Par exemple :
int tab[10] memset(tab, 0, 4 * sizeof(tab[0]))
1. Pourquoi faire tab[0] aulieu de par exemple sizeof(int)*4?
2. Comment savoir ce qu’il y a dans tab[0] vu que on a rien mis encore dans notre tableau
3. Pourquoi aussi lorsqu’on change le 0 par un 10 on obtient des n’ombres bizarres
memset(tab, 10, 4 * sizeof(tab[0]))
Moi je pensais que ça allait remplir les 4 premières cases du tableau avec 10 mais apparemment non
Pourtant si on avait mis 0, ça allait mettre des 0.
6 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
1) je pense que les deux sont équivalents
2) on ne sait pas, au départ, ce qu'il y a "dans" tab[0]
3) cela remplit les octets des 4 premiersint
du tableau. -
3. Ça le remplit comment?
Par exemple si j’ai :
int tab1[] = {3, 4}; int tab2[] = {1, 2}; memset(tab1, 1, sizeof(int))
Ça renvoie pourtab[0]
ettab[1]
un nombre bizarre16843009
.
D’où vient ce chiffre ? -
Ça donne 01010101
-
Merci j’ai compris
Pour voir si j’ai compris si à la place de 4 j’avais mis 2,esceque cela veut dire que ça rempli 2 octets avec la valeur 1 et on aurait obtenu 01010000?-
Eh bien, cela dépend du processeur, et parfois du logiciel.
C'est pour cela qu'il est recommandé d'éviter de travailler sur les octets d'un nombre.
Plus d'informations: https://fr.wikipedia.org/wiki/Boutisme
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Ok merci donc c’est pour cela memset on l’utilise pas souvent
Une dernière chose
Si on a :char buffer[10]; memset(buffer, ’\0’, 10)
Comment ça se fait ça met \0 à la fin de buffer ?
Moi je pensais que ça allait remplir les 10 premiers octets avec´\0’
. -
Merci finalement j'ai compris