Comment strcpy fonctionne en arrière-plan?

Cela peut être une question très simple pour certains. J'essayais de comprendre comment la fonction strcpy fonctionne réellement derrière les coulisses. par exemple, dans ce code

#include <stdio.h>
#include <string.h>
int main ()
{
  char s[6] = "Hello";
  char a[20] = "world isnsadsdas";
  strcpy(s,a);

  printf("%s\n",s);
  printf("%d\n", sizeof(s));
  return 0;
}

Que je suis déclarant s un tableau statique de taille inférieure à celle de la source. J'ai pensé qu'il l'habitude d'imprimer le mot en entier, mais il n'a imprimer world isnsadsdas .. Donc, je pensais que cette fonction strcpy peut-être de l'attribution de nouveaux taille si la destination est inférieur à la source. Mais maintenant, quand je vérifie sizeof(s), il est encore 6, mais c'est l'impression plus que cela. Comment que travailler réellement?

  • Peut-être que c'utilisation memcpy?
  • Attendez... ce que je reçois est "world isnsadsdas". Il n'y a pas de "Hello".
  • en fait c'est que seulement.. par erreur j'ai ajouté bonjour.. encore dépasser la taille
  • étudiant.cs.uwaterloo.ca/~cs350/common/os161-src-html/... Avis il n'y a pas d'allocation de mémoire. Aussi, vous trouverez peut-être que si vous imprimez 'a' après le strcpy, il est foiré, mais aussi pas de promesses, parce que le compilateur pourrait allouer plus d'espace que vous avez demandé.
  • Strcpy copie DE a À s dans votre exemple. Donc vous avez un débordement de la pile, puisque vous êtes de mettre l'ensemble de la chaîne "monde isnsadadas" dans un tampon de longueur de 6 octets.
InformationsquelleAutor SandBag_1996 | 2013-02-06