Memset

Résolu/Fermé
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 - Modifié le 7 mars 2022 à 17:37
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 - 24 févr. 2022 à 18:39
Bonjour,

Je comprends le fonctionnement général de
memset
sauf 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 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
Modifié le 24 févr. 2022 à 09:22
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 premiers
int
du tableau.
0
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
Modifié le 7 mars 2022 à 17:39
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 pour
tab[0]
et
tab[1]
un nombre bizarre
16843009
.

D’où vient ce chiffre ?
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
24 févr. 2022 à 11:55
Cela donne quoi en hexadécimal?
As-tu une idée de la représentation en memoire des entiers?
0
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
24 févr. 2022 à 11:58
Ça donne 01010101
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
24 févr. 2022 à 12:41
Ce qui montre bien les 1 dans chaque octet.
0
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
24 févr. 2022 à 13:17
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?
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
24 févr. 2022 à 13:48
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
Modifié le 7 mars 2022 à 17:40
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’
.
0
yg_be Messages postés 22724 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 25 avril 2024 1 476
24 févr. 2022 à 14:09
Je pense aussi que cela remplit les 10 premiers octets avec ´\0’.
Je me demande si tu as correctement examiné le contenu de buffer.
Peut-être qu'il y a une confusion sur "la fin de buffer"...
0
Theo_0055 Messages postés 275 Date d'inscription mardi 21 juillet 2020 Statut Membre Dernière intervention 19 janvier 2023 1
24 févr. 2022 à 18:39
Merci finalement j'ai compris
0