调用类中函数,用cout输出字符,出现乱码。附有代码,大家来看看啊该如何处理

调用类中函数,用cout输出字符,出现乱码。附有代码,大家来看看啊!
代码如下:
class   char_set
{
        .....
        int   char_set::get_char(int   pos,   char*   pchar);
        .....
};

int   char_set::get_char(int   pos,   char*   pchar)
{
*pchar   =   data[pos-1];
return   1;
}

void   main()
{
        char_set*   pset   =   new   char_set( "hello! ");

        char   ch;
        pset-> get_char(3,   &ch);
        cout   < <   ch   < <   endl;

        delete   pset;
}

输出的竟然是个“笑脸”,是哪里有问题啊?

------解决方案--------------------
int char_set::get_char(int pos, char* pchar);
> > > int get_char(int pos, char* pchar);
------解决方案--------------------
贴全代码
------解决方案--------------------
*pchar = data[pos-1];

char_set 的完整定义是如何的?
至少给出 构造函数 ~
------解决方案--------------------
检查 char_set* pset = new char_set( "hello! ");
构造的对象是否正确 ~
------解决方案--------------------
class char_set
{
.....
char data[100];
.....
char_set(char *a)
{
strcpy(data, a)
}
...
};

试试这个.

------解决方案--------------------
#include <stdio.h>
#include <iostream>

using namespace std;


class char_set
{
char data[100];

public:
char_set(const char* str)
{
strcpy(data, str);
}

int char_set::get_char(int pos, char& pchar);
};

int char_set::get_char(int pos, char& pchar)//这里修改了
{
pchar = data[pos-1];
return 1;
}

int main()
{
char_set* pset = new char_set( "hello! ");

char ch;
pset-> get_char(3, ch);

cout < < ch < < endl;

delete pset;

return 0;
}

LZ我修改成这样...你看看
------解决方案--------------------
= =上面修改成那样是贪好看..引用比指针清楚多了,...我LS的那个应该是你程序的问题所在把,猜的..
------解决方案--------------------
构造函数写对了就没问题吧

------解决方案--------------------
笑脸 是1的ascii码
------解决方案--------------------
不知道什么问题,这里贴上我的代码

#include <stdio.h>
#include <iostream>

using namespace std;


class char_set
{
char *data;

public:
char_set(const char* str)
{
int len = strlen(str);
data = new char[len+1];
strcpy(data,str);
}

int char_set::get_char(int pos, char* pchar);

~char_set()
{
delete[] data;
}
};

int char_set::get_char(int pos, char* pchar)//这里修改了
{
*pchar = data[pos-1];
return 1;