以下是我的结构:
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);