C指针/ HTTP解析器(为什么我的代码无法工作)

时间:2016-04-02 03:52:02

标签: c pointers

我以为我知道一些关于C指针的基础知识,但我无法弄清楚这个非常基本的启动到HTTP GET请求解析器有什么问题。

我已逐步完成代码并验证strstr()正在返回正确的字符串。但是,该行' p_server = pSubString'不管用。它试图写入导致SIG错误的p_server点。我已尝试过一系列不同的变体&和*运营商,但没有运气。

此外,我所使用的书(Kay和Steven Robbins的UNIX SYSTEMS Programming 19.8 p.676)表示,解析函数应该采用指针指针(即** p_path)。有什么想法吗? (在尝试了p2p后,我去了常规指针,因为我认为这会更容易)。

int parse(char *inlin, char *p_command, char *p_server, char *p_path, char *p_protocol, char *p_port)
{

int length;
char * pSubString;

p_command  = inlin;
pSubString   = my_strstr( inlin, "www");   
p_server = pSubString;

pSubString   = my_strstr( p_server, "/");
p_path = pSubString;

pSubString   = my_strstr( p_path, "HTTP");
p_protocol = pSubString;
}

谢谢!

PS:my_strstr()是图书馆strstr()。我只是在我的代码中添加了一个副本,因此我可以使用GDB逐步完成它。

1 个答案:

答案 0 :(得分:0)

是的,你确实需要"指针指针" ...这段代码例如:

pSubString   = my_strstr( inlin, "www");   
p_server = pSubString; 

设置" p_server"到地址" www"被找到。哪个不会改变" call"中使用的指针。 to" parse()" ...一旦parse()返回就会丢失。

假设您按如下方式修改parse()

int parse(char *inlin, char **p_command, char **p_server, char **p_path, char **p_protocol, char **p_port)
{

    int length;
    char * pSubString;

    p_command  = inlin;
    pSubString   = my_strstr( inlin, "www");   
    *p_server = pSubString;

    pSubString   = my_strstr( p_server, "/");
    *p_path = pSubString;

    pSubString   = my_strstr( p_path, "HTTP");
    *p_protocol = pSubString;
}

假设您从以下代码段中致电parse()

char *my_command  = NULL;
char *my_server   = NULL;
char *my_path     = NULL;
char *my_protocol = NULL;
char *my_port     = NULL;
parse(buffer, &my_command, &my_server, &my_path, &my_protocol, &my_port);

在此更改之后," my _"的值变量,将包含parse()中对my_strstr()的各种调用的地址。