0
votes

Copier la matrice dans la matrice dans un autre tableau (de chaînes), dupliquer son contenu en C

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 (). xxx pré>

La sortie "étrange" est la suivante: p>

Hello, World


0 commentaires

3 Réponses :


0
votes

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


0 commentaires

2
votes

Le spécificateur de conversion % s sert à des chaînes de sortie qui sont des séquences de caractères terminées par le caractère zéro '\ 0' .

Cependant ce tableau xxx

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.

pour émettre le tableau Vous devez utiliser un autre format xxx

Voici un programme de démonstration xxx

sa sortie est xxx

alternativement, vous pouvez définir les tableaux comme ayant 14 éléments avec Un élément réservé à la fin de zéro.

Payer en compte qu'il sera correct d'utiliser les arguments suivants dans l'appel de memcpy xxx


0 commentaires

0
votes
#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;
}

0 commentaires