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   -
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

  1. 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 premiers
    int
    du tableau.
    0
  2. Theo_0055 Messages postés 273 Date d'inscription   Statut Membre Dernière intervention   1
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Cela donne quoi en hexadécimal?
      As-tu une idée de la représentation en memoire des entiers?
      0
  3. Theo_0055 Messages postés 273 Date d'inscription   Statut Membre Dernière intervention   1
     
    Ça donne 01010101
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Ce qui montre bien les 1 dans chaque octet.
      0
  4. Theo_0055 Messages postés 273 Date d'inscription   Statut Membre Dernière intervention   1
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Theo_0055 Messages postés 273 Date d'inscription   Statut Membre Dernière intervention   1
     
    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
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      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
  7. Theo_0055 Messages postés 273 Date d'inscription   Statut Membre Dernière intervention   1
     
    Merci finalement j'ai compris
    0