簡體   English   中英

刪除C ++ char *具有點地址

[英]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")

這將不起作用,因為thisValuechar*

使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM