【发布时间】:2013-02-25 10:30:12
【问题描述】:
这可能是我遇到过的最奇怪的事情之一。我在 C 语言中编程不多,但根据我所知道的情况以及在线检查不同的来源,变量 macroName 和 macroBody 仅在 while 循环的范围内定义.因此,每次循环运行时,我都希望 marcoName 和 macroBody 获得新地址并成为全新的变量。然而事实并非如此。
我发现即使循环再次运行,两个变量共享相同的地址,这让我非常头疼需要检查元素唯一性的链表。我不知道这是为什么。 macroName 和 macroBody 不应该在每次 while 循环运行时获得全新的地址吗?
我知道这是问题所在,因为我正在打印地址并且它们是相同的。
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;
}
【问题讨论】:
-
如果您的期望是为两个变量获取一个唯一的地址,为什么不定义一个指针,为每次循环运行分配和释放内存。另外,您对问题的评论很有趣。您提到您根据地址的唯一性做出决定,在这种情况下,地址是堆栈变量/内存指针。
-
是的,我可能会做这样的事情。谢谢!