C ++如果'something'不为null且不是“0.0.0.0”

时间:2014-01-20 18:35:33

标签: c++

任何人都可以帮我解决下面的代码吗?

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”的情况下打印结果。

谢谢!

3 个答案:

答案 0 :(得分:8)

这里有几个潜在的问题。

  • NULL,又名0,又名"空指针",与空字符串""相同。根据较大的上下文,您可能需要检查其中一个或两个。
  • 使用==!=比较C风格的字符串(更好地考虑作为小整数数组,通常但不一定是与某些文本编码中的代码点对应的小整数)默默接受,但没有按你的意愿行事;它比较了数组的内存地址,而不是它们的内容。 " String literal" C ++中的语法生成这些数组的匿名实例。
  • C ++ std::string对象更像是高级语言中的第一类字符串对象,将==!=应用于 比较它们内容。并撰写str == "literal"does compare the contents of the string to the contents of the 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);

std::string const &gw_name = pAdapter->GatewayList.IpAddress.String;
// gw_name cannot be NULL in this case
if (!gw_name.empty() && gw_name != "0.0.0.0")
  printf("\tGateway\t%s\n", gw_name.c_str());

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

答案 1 :(得分:1)

我会写下面的方式

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() );
      }

前提是pAdapter-> GatewayList.IpAddress.String的类型为std :: string。

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

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 );
      }

答案 2 :(得分:0)

我是按照以下方式做到的

  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);
  }

感谢您的支持!!!