problèmes avec char array = char array

J’ai:

char message1[100]; char message2[100]; 

Lorsque j’essaie de faire message1 = message2 , j’obtiens une erreur:

types incompatibles lors de l’atsortingbution au type 'char[100]' du type 'char *'

J’ai des fonctions comme

 if(send(clntSocket, echoBuffer, recvMsgSize, 0) != recvMsgSize){ DieWithError("send() failed") } 

entre. Est-ce que ces choses pourraient être gâchées? 🙁

J’ai le sentiment que peut-être vous ne pouvez pas faire = sur les tableaux de caractères ou quelque chose, mais j’ai regardé autour de moi et je n’ai rien trouvé.

Vos soupçons sont corrects. C (je suppose que c’est C) traite une variable de tableau comme un pointeur.

Vous devez lire la FAQ C sur les tableaux et les pointeurs: http://c-faq.com/aryptr/index.html

Vous ne pouvez rien affecter à une variable de tableau en C. Ce n’est pas une “valeur modifiable”. Dans la spécification, voir §6.3.2.1 Lvalues, tableaux et désignateurs de fonctions :

Une lvalue est une expression avec un type d’object ou un type incomplet autre que void ; Si une valeur ne désigne pas un object lors de son évaluation, le comportement n’est pas défini. Lorsqu’un object est dit avoir un type particulier, le type est spécifié par la lvalue utilisée pour désigner l’object. Une lvalue modifiable est une lvalue qui n’a pas de type tableau, n’a pas de type incomplet, n’a pas de type qualifié qualifié et, s’il s’agit d’une structure ou d’union, n’a pas de membre (y compris, de manière récursive, un membre ou élément de tous les agrégats ou unions contenus) avec un type qualifié de const.

Le message d’erreur que vous obtenez est un peu déroutant car le tableau à droite de l’expression se décompose en un pointeur avant l’affectation. Ce que vous avez est sémantiquement équivalent à:

 message1 = &message2[0]; 

Ce qui donne le type côté droit char * , mais comme vous ne pouvez toujours rien affecter à message1 (c’est un tableau, tapez char[100] ), vous obtenez l’erreur de compilation que vous voyez. Vous pouvez résoudre votre problème en utilisant memcpy(3) :

 memcpy(message1, message2, sizeof message2); 

Si vous avez vraiment le coeur à utiliser = pour une raison quelconque, vous pouvez utiliser des tableaux à l’intérieur de structures … Ce n’est toutefois pas vraiment recommandé.