Je initialise mon tableau, avec 0 code>, et j'ai le tampon propre, qu'advient-il des bits? Par exemple, lorsque je initialise avec
'A' code>, pas le même, s'il était avec
Memset code> Le tampon entier serait rempli avec
'A' code >?
#include <stdio.h>
#include <string.h>
int main(void) {
char buffer[256] = {0}, array[256] = {'a'};
char array1[256];
memset(array1, 'a', sizeof(array1));
printf("%c\n%c\n%c\n", buffer[1], array[1], array1[1]);
return 0;
}
3 Réponses :
Si l'initialiseur ne fournit pas suffisamment d'éléments pour initialiser la variable complète, le repos est initialisé comme si la variable était déclarée au niveau mondial, c'est-à-dire: p>
0 code> li>
- flotte à
0. code> li>
- Pointeurs à
NULL code>. LI>
ul>
Dans votre exemple particulier, les éléments restants du char code> -Array tableau code> suivront la règle ci-dessus pour les entiers. P>
L'initialisation dans le cas du tableau 6.7.9 Initialisation Donc, seul le premier élément du tableau code> aura la valeur mais dans le cas de La fonction copie la valeur de donc dans ce cas, tous les éléments de [256] = {'A'}; code> se produit conformément à cette règle: p>
...
21 s'il y a moins d'initialistes dans une attelle-bloquée LISTE que des éléments ou des membres d'un agrégat ou moins de caractères dans un littéral à chaîne utilisée pour initialiser un tableau de taille connue que des éléments de la matrice, Le reste de l'agrégat doit être initialisé implicitement identique à celui des objets qui ont une durée de stockage statique forte>. p>
blockQuote>
'a' code>. p>
MEMSET Code>
fonction, p>
VOID * MEMSET (NOID * S, INT C, TAILLE_T N); CODE> P>
blockQuote>
C code> (converti en un
non signé char code>) dans chacun des premiers caractères code> N code> de l'objet pointé vers par
s code>. p>
array1 code> auront la valeur
'a' code>. p>.
La fonction MEMSET n'était qu'un exemple, mais merci pour votre réponse.
Lorsque vous entrez la fonction, dans ce cas comme le programme passe dans la fonction, la pile sera augmentée de suffisamment pour faire de la place à 256 caractères dans le tableau, la valeur des caractères de la matrice est indéfini, il est possible que cette zone en mémoire soit précédemment écrite par une autre fonction ou un autre programme qui n'en a plus besoin, nous ne savons donc pas quelle est la valeur du reste de la matrice. P> Quand vous écrivez p> équivalent à: p> Dans ce cas, nous n'avons pas défini ce qui est dans le reste de le tableau p> lorsque vous faites p> La CPU devra passer par l'ensemble de la matrice et initialiser chaque caractère dans la matrice à "A", créant une valeur connue pour tout dans la matrice au prix d'utilisation d'un peu plus de processeur. P> p> Main () CODE> La pile est augmentée de la quantité requise par le cadre de pile, dans le cadre de la pile, il y a de l'espace pour tous les autos (variables déclarées dans la fonction) ainsi que d'autres informations non pertinentes ici.
Donc, dans ce cas lorsque vous écrivez
Il peut sembler que la mémoire tampon était entièrement remplie par l'initaliser, mais c'est tout simplement parce que tout dépassant l'entrée que vous donnez est définie sur 0 pour les caractères. Si vous essayez
tampon [256] = {65} code> au lieu de cela, vous remarquerez que seule la position 0 est 65
('a') code>
Je sais que c'était juste un exemple, car quand il initialise 0, le reste de la matrice est rempli de 0 tuberculose, je ne me souviens pas pourquoi cela se produit
Dupliqué possible de Comment initialiser tous les membres d'un tableau à la même valeur?