這也許是我遇到過的最奇怪的事情之一。我不用C編程太多,但從我知道的是真實的,再加上在線檢查不同的來源,變量宏名稱和宏體只在while循環的範圍內定義。所以每次循環運行,我期待marcoName和宏體獲得新的地址,併成爲完全新的變量。但是,這不是事實。循環內變量範圍
我發現,即使循環再次運行,兩個變量共享相同的地址,這導致我嚴重頭痛的鏈表,我需要檢查元素的唯一性。我不知道這是爲什麼。不應該宏名稱和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;
};
檢查元素是否已存在於鏈接列表中的函數。但由於*名稱具有相同的地址,因此我總是在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;
}
如果您的期望是獲得兩個變量的唯一地址,爲什麼不定義一個指針,爲循環的每次運行分配和釋放內存。另外,你對這個問題的評論很有意思。你提到你根據地址的唯一性做出決定,在這種情況下,這是一個棧變量/存儲器指針。 – Ganesh 2013-03-10 03:12:16
是的,我可能會做這樣的事情。謝謝! – ThePedestrian 2013-03-10 03:24:31