gpt4 book ai didi

C 指针/HTTP 解析器(为什么我的代码不起作用)

转载 作者:行者123 更新时间:2023-11-30 21:28:57 26 4
gpt4 key购买 nike

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

我已单步执行代码并验证 strstr() 返回正确的字符串。但是,“p_server = pSubString”行不起作用。它试图写入 p_server 指向的位置,这会导致 SIG 错误。我已经尝试了一些使用 & 和 * 运算符的不同变体,但没有运气。

此外,我正在使用的书(Kay 和 Steven Robbins 的 UNIX SYSTEMS 编程 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 逐步执行它。

最佳答案

是的,您确实需要“指针到指针”...例如以下代码:

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

将“p_server”设置为找到“www”的地址。这不会将“调用”中使用的指针更改为“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() 的各种调用的地址。

关于C 指针/HTTP 解析器(为什么我的代码不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36368974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com