这可能是我遇到过的最奇怪的事情之一。我没有在 C 语言中编写太多程序,但根据我所知道的情况以及在线检查不同的来源,变量macroName和macroBody仅在 while 循环的范围内定义。因此,每次循环运行时,我都希望marcoName和macroBody获得新地址并成为全新的变量。然而,事实并非如此。
我发现即使循环再次运行,两个变量共享相同的地址,这让我对需要检查元素唯一性的链表感到非常头疼。我不知道这是为什么。每次while循环运行时macroName和macroBody不应该获得全新的地址吗?
我知道这是问题所在,因为我正在打印地址并且它们是相同的。
while(fgets(line, sizeof(line), fp) != NULL) // Get new line
{
char macroName[MAXLINE];
char macroBody[MAXLINE];
// ... more code
switch (command_type)
{
case hake_macro_definition:
// ... more code
printf("**********%p | %p\n", ¯oName, ¯oBody);
break;
// .... more cases
}
}
作为我的链表代码一部分的代码。
struct macro {
struct macro *next;
struct macro *previous;
char *name;
char *body;
};
检查元素是否已存在于链表中的函数。但是由于 *name 具有相同的地址,所以我总是在 if 条件内结束。
static struct macro *macro_lookup(char *name)
{
struct macro *temp = macro_list_head;
while (temp != NULL)
{
if (are_strings_equal(name, temp->name))
{
break;
}
temp = temp->next;
}
return temp;
}