c-清除按地址传递给函数的嵌套结构中的所有值



以下是我的结构:

struct Name {
char firstName[31];
char middleInitial[7];
char lastName[36];
};
struct Contact
{
struct Name name;
};

我有一个联系人结构的数组,通过地址传递给这个函数:

void updateContact(struct Contact contacts[], int size)
{
// More code up here that deals with finding the index 
// and such
contacts[index].name = { 0 }; // Expected an expression before {
}

名称结构是用数据填充的,我只想重新初始化包含的所有值,这样我就可以创建新的数据。

您可以将一个联系人清零,如下所示:

memset(contacts[index].name, 0, sizeof contacts[index].name);

这将导致所有字符串的长度为零。


或者,您可以像这样只将NUL分配给每个字符串的第一个字符,但这需要您知道并跟踪struct Name:的所有成员

contacts[index].name.firstName[0] = '';
contacts[index].name.middleInitial[0] = '';
contacts[index].name.lastName[0] = '';

或者,您的编译器可能支持以下语法:

contacts[index].name = (struct Name){ 0 };

关于:

contacts[index].name = { 0 };

这只在初始化期间有效,并且该语句是一个赋值。

建议:

memset( contacts[ index ].name, 0, sizeof( contacts[ index ].name ) );

然而,要清除结构中的所有字段,建议:

memset( contacts[ index ], 0, sizeof( contacts[ index] ) );

然而,要清除整个阵列,建议:

memset( contacts, 0, sizeof( contacts ) );

我建议您使用malloc,这样您就可以使用free(指针(轻松释放内存;

将您的结构更改为:

struct Name {
char* firstName;
char* middleInitial;
char* lastName;
};

这是为您制作结构时使用的:

Name name;
name.firstName = (char*) malloc(sizeof(char) * 31);

//对其他字符串重复

free(name.firstName);
free(name.middleInitial);
free(name.lastName);

最新更新