你的问题不是很清楚。
您可能只需要检查 C 指针,以及start->prior
引用prior
包含在的值之类的语法start
。
例如
// Set the i1 value of start to 42
start->i1 = 42;
printf("The answer is: %d\n", start->i2);
或者,您可能希望拥有与您的结构之一进行交互的等效方法。
例如:
struct abc
{
char bbb[10];
char ccc[4];
char ddd[6];
int i1;
int i2;
struct abc *prior, *next;
};
struct abb *start, *last, *this, *temp;
/**
* Set the BBB of struct target to a given value.
* @param value the value to set
* @return pointer to the target
*/
struct abc *setBBB(struct abc *target, char *value)
{
strncpy(target->bbb, value, sizeof(target->bbb));
return target;
}
char *getBBB(struct abc *target)
{
return target->bbb;
}
struct abc *next(struct abc *target)
{
return target->next;
}
int getI1(struct abc *target)
{
return target->i1;
}
完成以下操作:用数据加载结构然后根据 i1 的值,例如,当 i1 = 0 或当 i1 = 1 或结构的内容时显示和更改数据,而不考虑值的 i1。
你会这样做:
switch(getI1(start))
{
case 0:
setBBB(start, "Hello"); // NOTE: to treat this as a string,
// at most 9 characters are allowed,
// else the terminating zero will be lost.
break;
case 1:
setBBB(start, "World"); // ditto.
break;
...
}
并且,在一天结束时,将整个结构保存到文件中,其中包含在三个条件中的任何一个中所做的更改。
您想将结构保存到文件中,您需要类似
int saveStruct(char *filename, int position, struct abc *target)
{
int ret;
FILE *fp;
if (NULL == (fp = fopen(filename, "r+")))
{
if (NULL == (fp = fopen(filename, "w")))
{
return -1; // Error.
}
}
fseek(fp, position * sizeof(struct abc), SEEK_SET);
ret = fwrite(target, sizeof(struct abc), 1, fp);
fclose(fp);
return ret;
}
不过,上面有一些问题。指针(*prior 和 *next)的值一旦保存到磁盘将变得毫无意义,并且在从磁盘加载时仍然如此。因此,该loadStruct()
函数将需要恢复 *prior 和 *next 的值作为附加参数。
此外,如果您之前没有在位置 #0 保存过结构,则不能(但这取决于平台)在位置 #1 保存结构。每次保存都会执行昂贵的打开和关闭。
int loadStruct(char *filename, int position, struct abc *target)
{
int ret;
FILE *fp;
if (NULL == (fp = fopen(filename, "r")))
{
return -1; // Error.
}
fseek(fp, position * sizeof(struct abc), SEEK_SET);
ret = fread(target, sizeof(struct abc), 1, fp);
target->prior = NULL;
target->next = NULL;
fclose(fp);
return ret;
}
// 上面,用下面的测试用例测试,返回 'Hello!' 正如预期的那样。
int main()
{
struct abc *start, *another;
start = malloc(sizeof(struct abc));
setBBB(start, "Hello!");
saveStruct("file.bin", 0, start);
another = malloc(sizeof(struct abc));
loadStruct("file.bin", 0, another);
printf("Re-read: %s.\n", getBBB(another));
}