[英]Remove C++ char* has point address
由於更改了項目設置,因此下面的布爾值返回false,因為在調試器中,char *參數的值包含指針地址。 我該如何刪除?
我創建了這個簡單的示例來說明(我必須保留char *數據類型),並且我無法執行模式匹配來刪除指針地址。
void Test(char* thisValue)
{
if (thisValue == "PassingTest")
{
bo = true;
}
else
{
bo = false;
}
}
在調試器中,我發現thisValue =“ PassingTest”
請指導如何讓thisValue僅包含“ PassingTest”作為值,而不包含指針地址。
這就是char *的工作方式-它們是內存中字符的指針。 如果您想要一個支持值的字符串,則可以使用#include <string>
std::string
。
使用char * s,您可以使用
if (strcmp(thisValue, "PassingTest") == 0)
如果您不打算在函數中修改字符串內容,則可以接受const char* thisValue
而不是char* thisValue
。
==
運算符無法比較C中的字符串值; 它只能比較他們的指針。 使用strcmp
函數測試兩個字符串是否相等(如果相等,則返回0)。
if (thisValue == "PassingTest")
這將不起作用,因為thisValue
是char*
。
使用std::string
:
if (std::string(thisValue) == "PassingTest")
現在可以使用了。
如果這樣做,會更好:
void Test(const std::string & thisValue)
{
bo = (thisValue == "PassingTest") ;
}
您不能保證兩個相同的文字字符串將駐留在相同的內存地址。
如果他們這樣做,那么這就是“恆定折疊”的一個示例,這是可能會或可能不會進行的優化。
因此,您的代碼具有任意結果。
為避免此問題,只需使用std::string
而不是原始指針和原始數組即可。
喜歡
void test( std::string const& thisValue )
{
bo = (thisValue == "PassingTest");
}
干杯,……
在C中使用strcmp(3)
。 C ++為此提供了很好的std::string
。
原因是在C ++中, if
塊中的比較是比較指針地址而不是string
值。 要比較實際的string
值,您需要使用諸如strcmp
類的函數,或者甚至更好地使用STL string
值
void Test(const stl::string thisValue) {
if (thisValue == "PassingTest") {
bo = true;
} else {
bo = false;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.