//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处就出错,为什么。
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处就出错,为什么。
2、在成员函数中使用ARG_TYPE,语法?
答: 语法正确。3、在test()中定义了一个零食的指针字符数组,Q1处可以使用,但Q2处就出错,为什么。
答: Q2处出错是因为xy::ARG_TYPE成员变量未初始化。
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就不好用,我真费解。
请赐教。
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是个野指针.
我非常想知道如何在构造函数中或在.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好象没变,两个函数有哪点差异。
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]);