0

ユーザーが入力したURLが必要な形式であることを確認しようとしています。この場合、http://存在する場合は削除しようとしていますが、非常に奇妙な問題が発生しています...

関数" www.google.com"または""をフィードすると、http://www.google.comすべてが期待どおりに実行されます。ただし、有効なURLではないもの(ポテトなど)をフィードすると、メモリ内にあるジブリッシュが返されます...

なぜこれが必ずしも問題ではないのか、それは間違いなく予期されたプログラムの振る舞いではなく、なぜそれがこのように振る舞うのか私にはわかりません...

Enter URL: potato

Error! Could not resolve ip address for host: ╪☻ï*** Process returned 1 ***
Press any key to continue...

問題の関数は次のとおりです。

char *bldurl(const char *url)
{
    char *nurl;
    int ch = 0, i = 0;

    if(chksbstr(url, "http://") < 0)
    {
        if(!(nurl = malloc(strln(url) + 8)))
        {
            printf("\nError! Memory allocation failed while appending URL!");
            return 0x00;
        }
        nurl[ch] = 'h';
        nurl[++ch] = 't';
        nurl[++ch] = 't';
        nurl[++ch] = 'p';
        nurl[++ch] = ':';
        nurl[++ch] = '/';
        nurl[++ch] = '/';
        for(++ch; i <= strln(url); ch++, i++) nurl[ch] = url[i];
        nurl[--ch] = 0x00; 
    }
    else
    {
        if(!(nurl = malloc(strln(url) + 1)))
        {
            printf("\nError! Memory allocation failed while appending URL!");
            return 0x00;
        }
        for(i = 0; i <= strln(url); i++) nurl[i] = url[i];
        nurl[i + 1] = 0x00;
    }
    return nurl;
}

そして、これがその特定のエラーメッセージを返す私のコードの部分です:

    if(!(hostip = gethostbyname(hostname)))
    {
        free(hostname);
        free(url);
        printf("\nError! Could not resolve ip address for host: %s", hostname);
        WSACleanup();
        return 0x00;
    }

hostname上記のコードでは、前述の関数からの戻り値です。

どう考えたらいいのかよくわかりません。

4

2 に答える 2

5

ホスト名で「無料」を呼び出してから、それを印刷しようとしています。もちろん、それは読めないものになります!あなたは本当にそれを印刷してから解放するべきだと思います。

于 2012-08-27T00:17:44.823 に答える
4

ホスト名を解放して印刷することはできません。

于 2012-08-27T00:16:38.700 に答える