C 带字符的预填充结构及其数组
简单的问题…我提前知道很多值,以后需要添加其他值,但为什么不在“direc[I]={L“Jim”,L“Smith”}行编译;我知道这些值C 带字符的预填充结构及其数组,c,struct,C,Struct,简单的问题…我提前知道很多值,以后需要添加其他值,但为什么不在“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,s
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"};
}
经典C没有结构文本。您只能在初始化变量时使用该语法,即作为其定义的一部分 但是,引入了C99,这将允许您这样编写:
direc[i] = ((struct NARRAY) { L"Jim", L"Smith" });
您需要使用
memcpy
或strncpy
等函数将数据复制到分配的内存中
memcpy(direc[i].sFName, "Jim", 3);
direct[i].sFName[3] = '\0';
您正在尝试使用结构/数组初始化,这仅在声明变量时允许。您必须自己初始化每个成员:
direct[i].sFname = L"Jim";
direct[i].sLname = L"Smith";
当然,如果您为数组中的某些条目动态分配这些成员,而为某些条目静态分配(如上面的示例中所示),您实际上无法知道哪些是动态分配的,哪些不是动态分配的,这将在释放这些指针时导致问题。您可以(或者更确切地说,\u tcsdup
用于TCHAR
),然后:
您可能想用它的编程语言来标记您的问题。
direct[i].sFname = _tcsdup(L"Jim");
direct[i].sLname = _tcsdup(L"Smith");