【问题标题】:C: Parsing substring from u_char*C:从 u_char* 解析子字符串
【发布时间】:2013-11-28 04:26:10
【问题描述】:

我正在努力寻找 u_char* 中子字符串的开头, 我试图获得“q =”的位置来解析来自 URL 的谷歌搜索 这让我发疯,如果有人能帮助我,我将不胜感激。 我的 C 知识有限。

这是我停留在的行:if(g_start = strstr(final_url, "q=") != NULL){

这是我的部分代码:

int  url_length,host_length, search_length;
u_char *url, *end_url, *final_url, *host, *end_host, *final_host, *ghostUrl, *google, *g_end, *g_start;


/* copy  host + url to a null terminated c string */
final_url = (u_char*)malloc(url_length + 1); //malloc ( length )  +1 for \0
final_host = (u_char*)malloc(host_length +1);
strncpy((char*)final_host,(char*)host, host_length);
strncpy((char*)final_url, (char*)url, url_length);
final_url[url_length] = '\0'; //null terminerer
final_host[host_length] = '\0';

    /* Everything above works fine.. */
   /* final_url looks like this: /search?biw=320&bih=570&tbm=isch&sa=1&ei=M0eFUsXvHOO54AS644GYCQ&q=dogs&oq=dogs&gs_l=mobile-gws-serp.12...0.0.0.1991659.0.0.0.0.0.0.0.0 */

if(strcmp("www.google.no", final_host) == 0){ /* host: www.google.no */
    if(g_start = strstr(final_url, "q=") != NULL){ /* This fails.. */       
printf("debug: search starts at %s\n", g_start); /* I have no idea.. how to get integer position from strstr()  */
    g_end = strchr((char*)g_start,'&'); // ?q=dogs[&]
    search_length = g_end - g_start;

    printf("DEBUG:  search_length: %i\n",search_length);
    google = (u_char*)malloc(search_length +1);     
    strncpy((char*)google, (char*)g_start, search_length);
    google[search_length] = '\0'; //null terminator

【问题讨论】:

    标签: c parsing substring strstr


    【解决方案1】:

    Operator precedence 表示

    if(g_start = strstr(final_url, "q=") != NULL)
    

    被评估为

    if(g_start = (strstr(final_url, "q=") != NULL))
    

    这会将10 分配给g_start

    您需要在行首周围使用括号() 以获得您需要的评估顺序:

    if((g_start = strstr(final_url, "q=")) != NULL)
    // ^                                 ^
    

    请注意,您的编译器应该已经警告您这一点。例如MSVC 给了

    warning C4047: '=' : 'char *' differs in levels of indirection from 'int'
    

    【讨论】:

    • 我的男人!非常感谢老兄,我真的很感激!我终于可以睡觉了:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 2022-11-17
    • 2011-11-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    相关资源
    最近更新 更多