具有相同大小和内容的C ++字符串比较返回false

时间:2018-07-16 20:27:56

标签: c++ c++11 visual-c++

当我尝试将函数产生的字符串与手动声明的字符串进行比较时遇到问题:

string ip = "3.3.333.33";

string cuxa(){

    HINTERNET hInternet, hFile;
    DWORD rSize;
    char buffer[47];

    hInternet = InternetOpen(NULL, INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    hFile = InternetOpenUrlA(hInternet, "https://www.myexternalip.com/raw", NULL, 0, INTERNET_FLAG_RELOAD, 0);
    InternetReadFile(hFile, &buffer, sizeof(buffer), &rSize);
buffer[rSize] = '\0';

    InternetCloseHandle(hFile);
    InternetCloseHandle(hInternet);
    return buffer;
}

基本上,当我做一个简单的

if(cuxa() == ip){ cout << "false"; }

=>将不会返回任何内容,因为该比较为假。

它们的大小相等,字符串内容相同,但是我无法正常工作。

我将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:1)

您的问题是,www.myexternalip.com报告IP地址时,其末尾有换行符。

示例输出:

  

10.04.56.14/n

要解决您的问题,只需用空终止符覆盖换行符。

buffer[rSize-1] = '\0';