Fournir une chaîne qui n'est pas une valeur null à la fonction strcpy

Voici le code

smem_dmp(char *name, char content[])
{                     
        int i;
        int len = strlen(content);       

        printf("%s\n\n", name);

        for(i = 0; i < len; i++)
        {
             printf("%c\t%p\n", content[i], &content[i] );     
        }

        printf("Done\n\n");
}

print_bar()
{
     printf("********************************************************************\n");
}

int main(int argc, char *argv[])
{
    char a[16];
    char b[16];


    strcpy(a, "abcdefghijklmnop");
    printf("a = %s\nb = %s\n\n",a,b);

    smem_dmp("A", a);
    smem_dmp("B", b);

    print_bar();

    strcpy(b, "ABCDEFGHILKLMNOP");
    printf("a = %s\nb = %s\n\n",a,b);

    smem_dmp("A", a);
    smem_dmp("B", b);

    system("PAUSE");    
    return 0;
}

De regarder où a et b résident en mémoire, j'ai travaillé sur ce qui se passe. La chaîne copiée à b n'est pas null. C'est la cause du contenu d'un être enlevé parce que b est situé à (0028FF20) avant un en mémoire (0028FF30).

Ce qui se passe? Ne strcpy(b,"string") de ne pas s'arrêter jusqu'à ce qu'elle a traversé toute la mémoire sur le frame de pile variables? Désolé si je ne suis pas en utilisant la bonne terminologie. 🙂

Votre tableau a est trop petit. Il a besoin d'au moins 17 éléments.
Merci. Je sais. C'est plus sur le fonctionnement de la sécurité de la fixation de code.
Oui, il va les garder sur la copie des octets jusqu'à ce qu'il arrive à zéro octet en ce que la mémoire vive de l'accès aux ou il atteint inaccessable mémoire et provoque un défaut de mémoire. Si la mise en page comme vous le dites, il finira par écrire toutes sur l'autre chaîne, si il y arrive avant qu'il se bloque. Rien de cela n'est défini par aucune norme si, c'est juste ce qu'commun des implémentations de le faire.

OriginalL'auteur user84628 | 2013-04-26