#include<stdio.h>
struct test_ {
char *device_name;
char *path_name;
};
typedef struct test_ test_t;
struct capabilities_ {
test_t tab[3];
int enable;
};
static test_t table[3] = {
{ "first", "john"},
{ "second", "mike"},
{ "third:", "vik" },
};
int main()
{
struct capabilities_ cap;
//cap.tab = table; ???
return 0;
}
我有一个带有值的静态数组,我希望将其分配/复制到table to cap.tab结构下的相同类型/大小的变量。你能帮忙怎么做?
答案 0 :(得分:0)
你可以这样做:
memcpy(cap.tab, table, sizeof (test_t) * (sizeof(table) / sizeof(test_t)));
这与将字符串复制到另一个字符串时使用的机制相同。由于您已知表格大小,您可以这样做:
memcpy(cap.tab, table, 3 * sizeof(test_t));
复制字符的等效方法如下:
memcpy(str, str1, sizeof(char) * 4); // copy 4 of str1 into str
答案 1 :(得分:0)
要在运行时执行此操作,您可以使用user9000的方法,或类似的东西:
for (i = 0; i < 3; i++)
cap.tab[i] = table[i];
或者,将选项卡转换为使用指向test_t的指针而不是test_t数组。
struct capabilities_ {
test_t *tab;
int enable;
};
int main()
{
struct capabilities_ cap;
cap.tab = table;
printf("%s\n", cap.tab[1].device_name);
return 0;
}
或者,如果您尝试在初始化时执行此操作,请使用以下方法之一:
struct capabilities_ cap = {
{
{ "first", "john" },
{ "second", "mike" },
{ "third:", "vik" },
},
1
};
或者这个,
struct capabilities_ cap = {
{
table[0],
table[1],
table[2],
},
1
};
答案 2 :(得分:0)
如果要复制字符串,而不仅仅是指向字符串的指针,则需要为目标功能struct
中的每个字符串分配内存。这是一种方法
for (int i = 0; i < sizeof(table) / sizeof(test_t); i++)
{
size_t device_name_length = strlen(table[i].device_name);
size_t path_name_length = strlen(table[i].path_name);
size_t target_device_length = device_name_length + 1; // + 1 for null terminator
size_t target_path_length = path_name_length + 1; // + 1 for null terminator
cap.tab[i].device_name = (char*) malloc( target_device_length );
cap.tab[i].path_name = (char*) malloc( target_path_length );
strncpy_s(cap.tab[i].device_name, target_device_length, table[i].device_name, device_name_length);
strncpy_s(cap.tab[i].path_name, target_path_length, table[i].path_name, path_name_length);
}
如果您不打算进行深层复制,可以使用user9000显示的浅复制机制将指针复制到字符串。
此外,如果您使用上述机制,如果您的功能超出范围且不再使用,请不要忘记free
。)