我似乎能夠比較2個字符串文字而不需要提領它們。
更準確地說,你是比較指向字符串文字的指針,而不是文字本身。
我不應該用* name == *來代替嗎?
如果您打算僅比較第一個字符,那麼是的,儘管tail->name[0] == name[0]
在我看來會更具描述性。
如果您打算比較字符串的內容,那麼您必須取消引用指針,並且平行地遍歷每個字符串,比較沿途的字符。標準函數存在於:std::strcmp
。
如果你想要比較指針,那麼你現在正在做的是正確的。請注意,相同但獨立的字符串文字不保證具有相同的地址,因此這可能無法按照您的意圖進行。這取決於你的用例,這種方法是否合適。
我會嘗試用一個例子來解釋:
const char* argument = "test";
const char* name = argument;
const char* another_name = argument;
assert(name == another_name);
斷言保證是真實的,應該有什麼可奇怪的了。指針是彼此的副本,並指向存儲字符串文字的相同地址。
但是:
const char* name = "test";
const char* another_name = "test";
assert(name == another_name);
這種說法是不能保證是真的。但它也不保證是錯誤的。它沒有具體說明,直到實施。相同的字符串文字可以具有相同的地址應該不會令人感到意外,這是一個common optimisation。但你不能依賴這一點。在這種情況下,比較字符串的內容而不是地址,正如答案中前面所解釋的那樣。
你應該使用'strcmp'或'strncmp'。 – songyuanyao
這是有效的比較指針地址值,這裏的問題是有意圖的,因爲你已經指出你的意圖是比較指針指向的值 – EdChum
如果你使用C++,那麼爲什麼不使用'std ::字符串',可以使用'=='運算符通過值進行比較。 – MicroVirus