//a.h
class xy  
{public:
xy();
virtual ~xy();
const char *ARG_TYPE[6];
void test(void);};
//a.c
#include "stdafx.h"
#include "testdel.h"
#include "xy.h"
xy::xy()
{
const char*ARG_TYPE[6]      = {"MD", "XR", "SL", "DL", "TG", "ADV"};
}
void xy::test(void)
{
char p[80];
strcpy( p, "Hello world from " );
char*A[3]      = {"MD", "XR", "SL"};

strcat(p,A[0]);//q1
strcat(p,ARG_TYPE[1]);//q2
int i=1;}
问题:
1、ARG_TYPE我初始化的语法对吗?(感觉该没问题)
2、在成员函数中使用ARG_TYPE,语法?
3、在test()中定义了一个零食的指针字符数组,Q1处可以使用,但Q2处就出错,为什么。

解决方案 »

  1.   

    1、ARG_TYPE我初始化的语法对吗?(感觉该没问题)答: 正确。 但好像不合你的初衷,这个ARG_TYPE和class中的data memeber ARG_TYPE没有关系。
    2、在成员函数中使用ARG_TYPE,语法?
    答: 语法正确。3、在test()中定义了一个零食的指针字符数组,Q1处可以使用,但Q2处就出错,为什么。
    答: Q2处出错是因为xy::ARG_TYPE成员变量未初始化。
      

  2.   

    谢谢。
    1、我在构造函数中初始化ARG_TYPE为
    xy::xy()
    {
    const char*ARG_TYPE[6]      = {"MD", "XR", "SL", "DL", "TG", "ADV"};
    }
    但我在Test()中使用却不成功。什么问题?
    2、第2个问题是,如果在某个成员函数中如何使用经过构造函数初始化的指正数组ARG_TYPE
    例如用strcpy(want,ARG_TYPE)得到"SL", 或比较一个字串是否和ARG_TYPE[x]相同,诸如此类的操作。
    在test()中零食的可以用,但成员的变量ARG_TYPE就不好用,我真费解。
    请赐教。
      

  3.   

    1、我在构造函数中初始化ARG_TYPE为
    xy::xy()
    {
    const char*ARG_TYPE[6]      = {"MD", "XR", "SL", "DL", "TG", "ADV"};
    }
    但我在Test()中使用却不成功。什么问题?答:您还是没有认真看我的回答,我已告诉你这个ARG_TYPE和你的类成员ARG_TYPE是两码事,是两个不同的变量.你的类成员ARG_TYPE并没有初始化.2、第2个问题是,如果在某个成员函数中如何使用经过构造函数初始化的指正数组ARG_TYPE
    例如用strcpy(want,ARG_TYPE)得到"SL", 或比较一个字串是否和ARG_TYPE[x]相同,诸如此类的操作。答:你的方法没有错,错误在于类成员ARG_TYPE并没有初始化.这时候ARG_TYPE是个野指针.
      

  4.   

    非常感谢你,金陵五月。
      我非常想知道如何在构造函数中或在.H文件中初始化指针数组,你提出的
              “您还是没有认真看我的回答,我已告诉你这个ARG_TYPE和你的
               类成员ARG_TYPE是两码事,是两个不同的变量.你的类成员
               ARG_TYPE并没有初始化”
    我没想到,这种类型的数据初始化在何处用何方法(语法)初始化,我查了手头的资料没找到相关的,是否阁下可以再建议一下。
    此外我在用指针数组中发现一些奇怪问题,我贴在坛上了,这里随幅一份。
    以下这段程序运行后
    char*c1[2]  = {"MD", "XR"};
    char c2[]="No1 c2[0]= ";
    char c3[]="No1 c3[1]= ";
    strcat(c2,c1[0]);
    strcat(c3,c1[1]);char c4[]="No2 c4[0]= ";
    char c5[]="No2 c5[1]= ";
    strcat(c4,c1[0]);
    strcat(c5,c1[1]);
    预想出c2 c3 c4 c5 为
    No1 c2[0]= MD
    No1 c3[1]= XR
    No2 c4[0]= MD
    No2 c5[1]= XR
    实际为
    No1 c2[0]= MD
    No1 c3[1]= XR
    No2 c4[0]= 
    No2 c5[1]= XR
    1、好象c1[0]被改掉了,什么道理?似乎c1[0]中保存的指正偏移了
    2、如何按照预定的得出结果呢?
    3、如果strcat全换为strcpy,则c2 c3 c4 c5 为
    MD
    XR
    MD
    XR
    C1好象没变,两个函数有哪点差异。
      

  5.   

    在类里使用const是比较困难的,在实际工作中我通常是用:
    const char* Global_Type[6]      = {"MD", "XR", "SL", "DL", "TG", "ADV"};class xy  
    const char ** ARG_TYPE
    {public:
    xy:ARG_TYPE(Global_Type)(){};
    virtual ~xy();
    void test(void);};进行这类常量的初始化. 不过不是十分常见.第二个问题,是因为:
    strcat(c2,c1[0]);
    strcat(c3,c1[1]);
    错了,c2没有足够的长度再容纳c1[0],导致溢出,破坏了c1的数据.应为char*c1[2]  = {"MD", "XR"};
    char c2[256],c3[256];
    strcpy(c2,"No1 c2[0]= ");
    strcpy(c3,"No1 c3[1]= ");
    strcat(c2,c1[0]);
    strcat(c3,c1[1]);