我认为在C ++中初始化struct
所做的就是使用struct
的名称和变量。但是,我在此功能警告中未初始化警告。
如何初始化LPCPINFO cpinfo struct
?
#include <iostream>
#include <string.h>
#include <sstream>
using namespace std;
const int MAX_DEFAULTCHAR = 2;
const int MAX_LEADBYTES = 12;
typedef struct _cpinfo {
unsigned int MaxCharSize;
char DefaultChar[MAX_DEFAULTCHAR];
char LeadByte[MAX_LEADBYTES];
} CPINFO, *LPCPINFO;
int main() {
LPCPINFO cpinfo;
cpinfo->DefaultChar[0]= 1;
cpinfo->DefaultChar[1]= 0;
cpinfo->LeadByte[0] = cpinfo->LeadByte[1] = 0;
cpinfo->MaxCharSize = 4;
cout << cpinfo->DefaultChar[0] << " " << cpinfo->DefaultChar[1] << " "
<< cpinfo->LeadByte[0] << " " <<cpinfo->LeadByte[1] << " "
<< cpinfo->MaxCharSize
<< endl;
return 0;
}
答案 0 :(得分:3)
LPCPINFO
被定义为指向CPINFO
结构的指针(请注意*
中的typedef
)。你需要分配内存:
LPCPINFO cpinfo = new CPINFO();
或者您可以使用CPINFO
结构:
CPINFO cpinfo;
cpinfo.DefaultChar[0] = 1;
//...
答案 1 :(得分:1)
初始化结构变量将如下所示:
_cpinfo MyScructVar;
结构的名称是_cpinfo,您可以使用此类型创建该类型的变量。
答案 2 :(得分:1)
由于您将此问题标记为C++
,因此如果您定义了struct
C ++方式,它会更加清晰:
struct _cpinfo {
unsigned int MaxCharSize;
char DefaultChar[MAX_DEFAULTCHAR];
char LeadByte[MAX_LEADBYTES];
};
然后main
变成了这个:
int main()
{
_cpinfo cpinfo;
cpinfo.DefaultChar[0]= 1;
cpinfo.DefaultChar[1]= 0;
cpinfo.LeadByte[0] = cpinfo.LeadByte[1] = 0;
cpinfo.MaxCharSize = 4;
cout << cpinfo.DefaultChar[0] << " " << cpinfo.DefaultChar[1] << " "
<< cpinfo.LeadByte[0] << " " <<cpinfo.LeadByte[1] << " "
<< cpinfo.MaxCharSize
<< endl;
return 0;
}
很可能,您对typedef
名称感到困惑,并认为它是结构本身。
另外,如果你想要一个指向struct的指针,那么声明一个指向struct的指针:
_cpinfo *whatever;
隐藏在typedef后面的指针可能会在您最喜欢的C
API中使用,但我不建议您在自己的代码中执行此操作,正如@CaptainOblivious所指出的那样。