2014-09-12 193 views
0

我有这样的代码:控制台输出笑脸

#include "stdafx.h" 
#include <iostream> 

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; 
} 

我不知道为什么我会得到一个笑脸,而不是第一个数组元素!我在这里做错了什么?它编译和但是输出

第一个数组元素运行良好:“笑脸”

这是什么意思? 我正在使用Visual Studio 2010.谢谢

+0

'char arr [3] = {1,2,3};'不是字符''1''''2' ''''3'',但不可打印的'\ 0x01','0x02','\ 0x03'。此外,对字符串使用'std :: string' – crashmstr 2014-09-12 19:26:12

回答

1

据,我所看到的,您要输出的第一个数组元素。但相反,您正在打印第二个(数组从0开始索引,而不是1)。第二个元素是2.现在请看看this table,你可以看到:数字2是一个笑脸。问题在于你输出的代码是2,而不是'2'。为了输出一个平手,让你的阵列看起来像这样:

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

不是,在ASCII中,0x02是STX,它是不可打印的。在[CP437](http://en.wikipedia.org/wiki/Code_page_437)中,0x02是☻BLACK SMILING FACE。 – 2014-09-13 02:51:31

1

inner_struct.arr被声明为char *,这意味着它包含一个字符数组(字节)。你想要一个数组来保存数字1,2,3吗?如果是这样,请使用int。如果你想信,初始化数组:

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

KC

2

您outputing的第二个元素这个数组中:

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

您分配它的值1 2和3,但是该变量是char类型的,所以它被解释为ascii。如果你在ascii图表上查找哪个角色的值为2,你会发现它是一张笑脸。所以它的确在做你要求它做的事情。

http://mathbits.com/MathBits/CompSci/Introduction/ASCIIch.jpg

什么是你期望的输出是什么?如果你希望它是一个数字,那么你将不得不将该数字的字符表示添加到数组中。即在123使用'1''2'代替,并'3'

+1

不是ASCII图表,而是代码页850图表。 – 2014-09-12 19:57:12