Vous n'allouez pas de mémoire pour ddj
. Comme il s'agit d'une variable locale, elle est allouée sur la pile. Les variables locales ne sont pas initialisées à 0/faux/NULL par défaut, donc la valeur de ddj
immédiatement après sa déclaration n'est pas définie -- elle aura la valeur de ce qui reste en mémoire à cet endroit précis de la pile. Toute tentative de déréférencement (c'est-à-dire de lecture ou d'écriture de la mémoire vers laquelle il pointe) aura un comportement indéfini. Dans votre cas, il se bloque parce qu'il pointe vers une adresse invalide.
Pour résoudre ce problème, vous devez allouer de l'espace de stockage pour les éléments suivants ddj
. Vous pouvez soit allouer un stockage statique sur la pile, soit un stockage dynamique sur le tas. Pour allouer un espace de stockage statique, procédez comme suit
// Allocate 64 bytes for ddj. It will automatically be deallocated when the function
// returns. Be careful of buffer overflows!
char ddj[64];
Pour allouer un espace de stockage dynamique :
// Allocate 64 bytes for ddj. It will NOT be automatically deallocated -- you must
// explicitly deallocate it yourself at some point in the future when you're done
// with it. Be careful of buffer overflows!
char *ddj = new char[64];
...
delete [] ddj; // Deallocate it
Au lieu de gérer vous-même le stockage, il serait préférable d'utiliser std::string
qui s'occupe automatiquement de la gestion de la mémoire.
Enfin, puisque vous ne faites que comparer les trois premiers caractères de la chaîne, il n'est pas nécessaire de faire des pieds et des mains pour copier la chaîne et la comparer. Il suffit d'utiliser strncmp()
:
if(strncmp(buffer, "JMX", 3) == 0)
{
...
}