简单的问题......我提前知道了很多价值,并且需要稍后添加其他值,但为什么不编译就行“direc [i] = {L”Jim“,L”史密斯 “};”在哪里我知道价值观?
struct NARRAY
{
TCHAR *sFName;
TCHAR *sLName;
};
void main()
{
struct NARRAY direc[1000];
DWORD i = 0;
direc[i].sFName = calloc(512,sizeof(TCHAR));
direc[i].sLName = calloc(512,sizeof(TCHAR));
direc[i] = {L"Jim",L"Smith"};
}
答案 0 :(得分:1)
经典C没有结构文字。您只能在初始化变量时使用该语法,即作为其定义的一部分。
但是,C99引入了compound literals,允许你像这样编写它:
direc[i] = ((struct NARRAY) { L"Jim", L"Smith" });
答案 1 :(得分:1)
您正在尝试使用结构/数组初始化,这仅在声明变量时允许。您必须自己初始化每个成员:
direct[i].sFname = L"Jim";
direct[i].sLname = L"Smith";
当然,如果您为数组中的某些条目动态分配这些成员,并且静态地(如上面的示例中)为某些条目分配这些成员,您实际上无法知道动态分配的是哪个,这将导致你来释放那些指针的问题。您可以使用strdup
(或更确切地说,_tcsdup
用于TCHAR
):
direct[i].sFname = _tcsdup(L"Jim");
direct[i].sLname = _tcsdup(L"Smith");
答案 2 :(得分:0)
您需要使用memcpy
或strncpy
等功能将数据复制到已分配的内存中。
memcpy(direc[i].sFName, "Jim", 3);
direct[i].sFName[3] = '\0';