Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 带字符的预填充结构及其数组_C_Struct - Fatal编程技术网

C 带字符的预填充结构及其数组

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

简单的问题…我提前知道很多值,以后需要添加其他值,但为什么不在“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"};

}

经典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");