2012-12-04 104 views
0

我必須檢查s1和s2的頂部卡。 s1是一堆卡片,s2也是。該stack_top功能我已經有了,如下:我比較哪種數據類型?

/* Retrive data from the top of the stack */ 
node_data stack_top(stack *s){ 
    if(!stack_empty(s)){  /* If the stack is not empty */ 
    return (s->top->data); /* Return the data */ 
    } 
    else{    /* Otherwise there is an error */ 
    cardlist_error("stack_top called on empty stack"); 
    } 
} 

while (strcmp (stack_top(s1), stack_top(s2)) ==0) 
//then do the following.. 

,但我得到了segmentation fault,我應該如何對它們進行比較2?

+2

如果堆棧爲空,你真的應該從你的函數中返回一些東西。如果你的函數說要返回一些東西,你應該返回一些東西**無論發生什麼** – mathematician1975

+0

你需要比較'stack_top'返回的'node_data'的內容。 (你沒有包含'node_data'的定義,所以很難確切地說你需要比較的東西;你顯示的只是'stack_top'返回's-> top-> data',沒有指出什麼' data'不是'node_data'。)什麼決定它們是否相等? –

回答

1

如果您想檢查兩個stack指針是否指向同一個實例,請檢查它們的地址是否匹配s1 == s2

如果您想檢查兩個指針​​是否都保存相同的數據,並且結構中只有非指針成員,您可以檢查memcmp(s1, s2, sizeof(*s1)) == 0

如果您想檢查兩個指針​​都保存相同的數據,並且結構中有指針(例如字符串),您可能需要編寫一個函數,它通過比較每個成員輪流比較兩個實例。