具有字符及其数组的预填充结构

时间:2012-06-27 10:51:01

标签: c struct

简单的问题......我提前知道了很多价值,并且需要稍后添加其他值,但为什么不编译就行“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"};

}

3 个答案:

答案 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)

您需要使用memcpystrncpy等功能将数据复制到已分配的内存中。

memcpy(direc[i].sFName, "Jim", 3);
direct[i].sFName[3] = '\0';