从turbo c中移植一段程序到vc++6.0,原有程序中定义了一个字符指针数组unsigned char *Str[]={"aaaa", "bbbbb","ccc","dddddd"},我将Str作为某个类A的成员变量,在该类的构造函数中对其作初始化,
程序如下:
在*.h中
class A
{
private:
unsigned char *Str[];
.......
}
在*.cpp中
A::A
{
strcpy(Str[0], "aaaa");
strcpy(Str[1], "bbbbb");
strcpy(Str[2], "ccc");
strcpy(Str[3], "dddddd");
}
出现一个警告和一个错误:
warning C4200: nonstandard extension used : zero-sized array in struct/union
error C2664: 'strcpy' : cannot convert parameter 1 from 'unsigned char *' to 'char *'
这是什么原因,怎么修改?如果*.cpp改成: A::A
{
*Str[]={"aaaa", "bbbbb","ccc","dddddd"};
}
则出现一个警告和三个错误:
warning C4200: nonstandard extension used : zero-sized array in struct/union
syntax error : ']'
syntax error : missing ';' before '{'
error C2143: syntax error : missing ';' before '}'
这又怎么改?能说明原因吗?在类中怎么声明字符指针数组,在那里初始化数组?
程序如下:
在*.h中
class A
{
private:
unsigned char *Str[];
.......
}
在*.cpp中
A::A
{
strcpy(Str[0], "aaaa");
strcpy(Str[1], "bbbbb");
strcpy(Str[2], "ccc");
strcpy(Str[3], "dddddd");
}
出现一个警告和一个错误:
warning C4200: nonstandard extension used : zero-sized array in struct/union
error C2664: 'strcpy' : cannot convert parameter 1 from 'unsigned char *' to 'char *'
这是什么原因,怎么修改?如果*.cpp改成: A::A
{
*Str[]={"aaaa", "bbbbb","ccc","dddddd"};
}
则出现一个警告和三个错误:
warning C4200: nonstandard extension used : zero-sized array in struct/union
syntax error : ']'
syntax error : missing ';' before '{'
error C2143: syntax error : missing ';' before '}'
这又怎么改?能说明原因吗?在类中怎么声明字符指针数组,在那里初始化数组?
那你赋值的时候就的new出来啊
初始化可以用memset
============
在类声明中将上面的改成char *Str[];即可,初始化还是在构造函数中实现
只是说定义的是一个数组指针,但是这个数组有多少个元素没有定义。strcpy(Str[0], "aaaa");
你可以把str[0]按char*转一下。
//CSingleString类的.h文件
class CSingleString
{
public:
//默认构造
CSingleString();
//传入单个字符串及字符串长度
BOOL Init(unsigned char *sStr, int len);
~CSingleString();
private:
unsigned char *m_SingleString;
int m_length;
};
CSingleString::CSingleString()
{
m_SingleString = NULL;
}
BOOL CSingleString::Init(unsigned char *sStr, int len)
{
if(len > 0)
{
m_length = len;
m_SingleString = new unsigned char[len];
memcpy(m_SingleString, sStr, len);
return true;
}
return false;
}
//CSingleString的.cpp文件
CSingleString::~CSingleString()
{
if(m_SingleString != NULL)
{
delete [] m_SingleString;
m_SingleString = NULL;
}
}
class A
{
A();
~A();
private:
CSingleStringr *m_Str;
.......
};
A::A
{
m_Str = new CSingleStringr[4];
m_Str[0].Init("aaaa", strlen("aaaa"));
m_Str[1]....
}
A::~A()
{
if(m_Str != NULL)
{
delete [] m_Str;
m_Str = NULL;
}
}