console sorties smiley face

J’ai ce code:

#include "stdafx.h" #include  typedef struct{ int s1; int s2; char c1; char* arr; }inner_struc; int _tmain(int argc, _TCHAR* argv[]) { inner_struc myinner_struct; myinner_struct.s1 = myinner_struct.s2 = 3; myinner_struct.c1 = 'D'; char arr[3] = {1,2,3}; myinner_struct.arr = arr; std::cout << "first array element: " << myinner_struct.arr[1] << std::endl; return 0; } 

Je me demande pourquoi je reçois un visage souriant au lieu du premier élément de tableau! qu’est-ce que je fais mal ici? Il comstack et fonctionne bien mais le résultat est

premier élément du tableau: “smiley face”

Que cela veut-il dire? J’utilise Visual Studio 2010. Merci

Comme je peux le voir, vous essayez de générer le premier élément de tableau. Mais au lieu de cela, vous imprimez le second (les tableaux sont indexés à partir de 0, pas 1). Le deuxième élément est 2. Maintenant, jetez un coup d’œil à ce tableau , comme vous pouvez le constater: le chiffre 2 est un visage souriant. Le problème est que vous sortez un caractère avec le code 2, pas ‘2’. Pour générer un point, donnez à votre tableau l’aspect suivant:

 char arr[3] = {'1','2','3'}; 

Vous sortez le deuxième élément de ce tableau:

 char arr[3] = {1,2,3}; 

Vous lui avez atsortingbué les valeurs 1 2 et 3, mais la variable est de type char, elle est donc interprétée comme ascii. Si vous recherchez quel personnage a une valeur de 2 sur une carte ASCII, vous verrez que c’est un visage souriant. Donc, il fait bien ce que vous lui avez demandé de faire.

http://soffr.miximages.com/c%2B%2B/ASCIIch.jpg

Qu’attendez-vous du résultat? si vous voulez que ce soit un nombre, vous devrez alors append la représentation en caractères de ce nombre dans le tableau. c’est-à-dire qu’au lieu de 1 , 2 ou 3 utilisez '1' , '2' et '3'

inner_struct.arr est déclaré comme char *, ce qui signifie qu’il contient un tableau de caractères (octets). Voulez-vous un tableau contenant les nombres 1, 2, 3? Si oui, utilisez int. Si vous voulez des lettres, initialisez le tableau avec:

  char arr[3] = { 'a', 'b', 'c' }; 

KC