我的逻辑让我失望(C ++,nslookup,char比较)

时间:2013-07-24 15:36:54

标签: c++ char logic popen

我正在循环使用C ++ _popen管道魔法在shell中发出“nslookup [IP]”命令所得到的响应。

您可能知道(从终端尝试... Windows命令提示符可能与另一个操作系统输出不同;我使用的是Windows 7),nslookup查询将返回如下内容:

C:\MyApps>nslookup 8.8.8.8
Server:  dns.mydomain.com
Address:  192.168.200.15

Name:    google-public-dns-a.google.com
Address:  8.8.8.8

这是我的代码(重要的代码段):

vector<string> IPAddresses;
// [...] some code to populate IP Addresses into that vector [...]

char buff[512];
for(int x=0;x<IPAddresses.size();x++)
{
    cmd = "nslookup " + IPAddresses[x];
    FILE *fpipe = _popen(cmd.c_str(),"r");
    while(fgets(buff, sizeof(buff), fpipe)!=NULL)
    {
        //DEBUG CODE HERE
    }
}

现在检查我的“调试代码”示例及其输出(注意当没有DNS记录时,“找不到IP:不存在的域”错误是正常的):

if(buff[0]=='N') cout<<buff;

输出:

Name:   computer1.mydomain.com
Name:   computer2.mydomain.com
*** dns.mydomain.com can't find 192.168.200.55: Non-existent domain
Name:   computer3.mydomain.com
*** dns.mydomain.com can't find 192.168.200.122: Non-existent domain

调试代码2:

if(buff[0]=='*') cout<<buff;

输出:

*** dns.mydomain.com can't find 192.168.200.55: Non-existent domain
*** dns.mydomain.com can't find 192.168.200.122: Non-existent domain

当我在寻找buff [0]为'N'时,如何弹出不存在的域错误?事实上,它出现在两个调试示例中,因此我的程序认为char既是'N'又是'*'???

1 个答案:

答案 0 :(得分:3)

这两个字符串可能不是因为你的代码正在打印而输出,而是因为nslookup正在将它们写入stderr,你的程序没有捕获它(因此与你的输出混合)