0

简单的问题...我提前知道了很多值,并且需要稍后添加其他值,但是为什么不编译在 "direc[i] = {L"Jim",L"Smith"} 行;" 我在哪里知道价值观?

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"};

}
4

3 回答 3

1

经典 C 没有结构文字。您只能在初始化变量时使用该语法,即作为其定义的一部分。

但是,C99 引入了复合文字,这将允许您像这样编写它:

direc[i] = ((struct NARRAY) { L"Jim", L"Smith" });
于 2012-06-27T11:02:49.730 回答
1

您正在尝试使用结构/数组初始化,这仅在声明变量时允许。您必须自己初始化每个成员:

direct[i].sFname = L"Jim";
direct[i].sLname = L"Smith";

当然,如果您为数组中的某些条目动态分配这些成员,而为某些条目静态分配这些成员(如上面的示例),您真的无法知道哪些是动态分配的,这将导致问题来释放那些指针。您可以使用strdup(或者更确切地说,_tcsdupfor TCHAR)然后:

direct[i].sFname = _tcsdup(L"Jim");
direct[i].sLname = _tcsdup(L"Smith");
于 2012-06-27T11:10:23.073 回答
0

您需要使用memcpy或之类的功能strncpy将数据复制到分配的内存中。

memcpy(direc[i].sFName, "Jim", 3);
direct[i].sFName[3] = '\0';
于 2012-06-27T11:03:15.837 回答