Je commence à apprendre à apprendre des fondamentaux de C, et je suis resté coincé avec ce programme simple qui produisit cette étrange sortie. Ce que j'essaie de faire est de copier le contenu d'un tableau en un autre tableau avec la fonction memcpy (). La sortie "étrange" est la suivante: p> Hello, World
3 Réponses :
Chaque chaîne en C a besoin de terminer zéro. Donc, la longueur de votre matrice trop petite pour accueillir la chaîne et le programme invoque l'UB.
Changement à: P>
#include <stdio.h> #include <string.h> int main() { char source[14] = "Hello, World!"; char destination[14]; memcpy(&destination, &source, 14); printf("%s\n", destination); return 0; }
Le spécificateur de conversion Cependant ce tableau p> ne contient pas de chaîne car il n'a que 13 éléments. Donc, il n'a pas d'espace pour la résiliation du zéro du littéral à chaîne d'occasion en tant qu'intiLaizer. P> pour émettre le tableau Vous devez utiliser un autre format P> Voici un programme de démonstration p> sa sortie est p> alternativement, vous pouvez définir les tableaux comme ayant 14 éléments avec Un élément réservé à la fin de zéro. P> Payer en compte qu'il sera correct d'utiliser les arguments suivants dans l'appel de % s code> sert à des chaînes de sortie qui sont des séquences de caractères terminées par le caractère zéro
'\ 0' code>.
memcpy code> p>
#include <stdio.h> #include <string.h> int main() { char source[] = "Hello, World!"; // <<-- let the compiler do the counting char destination[sizeof source]; // <<-- let the compiler do the counting strcpy(destination, source); /* equivalent to: memcpy(destination, source, sizeof source); */ printf("%s\n", destination); return 0; }