C++“如果”不是空的,不是“0.0.0.0”

C++“如果”不是空的,不是“0.0.0.0”,c++,C++,有人能帮我写下面的代码吗 if(pAdapter->GatewayList.IpAddress.String != "" && pAdapter->GatewayList.IpAddress.String != "0.0.0.0"); { printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String); } 这是错的吗?我是C++新手。我只想在pAd

有人能帮我写下面的代码吗

if(pAdapter->GatewayList.IpAddress.String != "" && pAdapter->GatewayList.IpAddress.String != "0.0.0.0");
      {
        printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
      }
这是错的吗?我是C++新手。我只想在pAdapter->GatewayList.IpAddress.String不为NULL且也不为0.0.0.0时打印结果


谢谢大家!

我会这样写

if ( !pAdapter->GatewayList.IpAddress.String.empty() &&  pAdapter->GatewayList.IpAddress.String != "0.0.0.0" );
      {
        printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String.c_str() );
      }
  if (stricmp(pAdapter->GatewayList.IpAddress.String, "0.0.0.0") != 0 )
  //if(pAdapter->GatewayList.IpAddress.String != "0.0.0.0");
  {
    printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
  }
前提是pAdapter->GatewayList.IpAddress.String的类型为std::String

否则,如果pAdapter->GatewayList.IpAddress.String的类型为char[]或char*,则我会将

if ( pAdapter->GatewayList.IpAddress.String[0] != '\0' && strcmp( pAdapter->GatewayList.IpAddress.String, "0.0.0.0" ) != 0 )
      {
        printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String );
      }

这里有几个潜在的问题

NULL,也称为0,也称为NULL指针,与空字符串不同。根据更大的上下文,您可能需要检查其中一个或另一个,或同时检查两者。 比较更好地被认为是小整数数组的C样式字符串,这些小整数通常(但不一定)对应于==或!=的文本编码中的代码点被默默地接受,却不做你所期待的;它比较数组的内存地址,而不是它们的内容。C++中的字符串文字语法产生这些数组的匿名实例。 C++对象:更像高级语言中的一流字符串对象,而应用= =或!=!与他们比较他们的内容。写str==literal等等。但是,这些对象不能直接传递给printf。 您没有告诉我们您拥有这两个类中的哪一个,也没有告诉我们它是否是其他类,例如特定于应用程序的字符串类,所以我只是猜测,但您可能想要其中之一

char const *gw_name = pAdapter->GatewayList.IpAddress.String;
if (gw_name       // checks for NULL - remove if impossible
    && *gw_name   // idiomatic shorthand check for "" - remove if impossible
    && strcmp(gw_name, "0.0.0.0")) // strcmp returns 0 if equal,
                                   // 1 or -1 if unequal
  printf("\tGateway:\t%s\n", gw_name);


这取决于pAdapter->GatewayList.IpAddress.String是C风格的字符串还是std::字符串。

我是按照以下方式完成的

if ( !pAdapter->GatewayList.IpAddress.String.empty() &&  pAdapter->GatewayList.IpAddress.String != "0.0.0.0" );
      {
        printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String.c_str() );
      }
  if (stricmp(pAdapter->GatewayList.IpAddress.String, "0.0.0.0") != 0 )
  //if(pAdapter->GatewayList.IpAddress.String != "0.0.0.0");
  {
    printf("\tGateway: \t%s\n", pAdapter->GatewayList.IpAddress.String);
  }

谢谢你的支持

在C语言中,您需要使用strcmp。不确定C++。字符串的类型是什么?std::string?pAdapter->GatewayList.IpAddress.string的类型是什么。还有检查内容是否不等于空字符串文字,而不是null。要检查某项内容是否为空,您必须执行以下操作!=0旧语法或在c++11中!=nullptrIn就他的情况来说,string不可能是null@Gasim,取决于字符串的类型。据我们所知,它可能是一个字符*。更改OP的代码格式是错误的,但将令人震惊的错误格式传播到您的答案中也是错误的。答案应该表现出良好的风格和良好的实践。在这种情况下,您不应该在开括号后或闭括号前放置空格,尤其不应该在一个位置放置空格,而不应该在另一个位置放置空格,块大括号不应该相对于“if”缩进。我仍然得到Gateway:0.0.0我将尝试@Zack的方式。。!非常感谢。没有名为stricmp的标准C库函数。在存在该函数的非标准遗留API的领域中,给定此特定输入,它应该做与strcmp完全相同的事情。strcmp对你不起作用吗?