gpt4 book ai didi

c - 如何在C中调用void指针类型函数

转载 作者:行者123 更新时间:2023-11-30 20:23:42 27 4
gpt4 key购买 nike

我正在编写一个套接字程序并尝试解析来自用户的命令行参数。假设我有一个如下所示的函数:

void *parseUserReq(char *arg)
{
int sock;

char buffer[1024];

int readIn;

char *str1, *str2, *str3;


//cast sock back to int
sock = (int)arg;

//Get input from client
readIn = recv(sock, buffer, 1024, 0);
buffer[readIn] = '\0';

//parse the 3 strings the user is supposed to enter

str1 = (char*)malloc(sizeof(buffer)+1);
strcpy(str1, buffer); // copy header data into str1

str1 = strtok(str1, " ");
printf("%s\n", str1);

str2 = strtok(str2, " ");
printf("%s\n", str2);

str3 = strtok(str3, "\r\n");
printf("%s\n", str3);

} // End of parseUserReq

我如何在 main 中调用该函数?目前我正在做这样的事情:

int main(int argc, char** argv)
{
// ^^^Calls for create, bind, listen, accept, and send^^^


char buffer[1024];
parseUserReq(buffer); // segmentation fault
return 0;
}

我可以添加我的代码来创建和绑定(bind)套接字,并在必要时监听、接受、发送。

编辑:刚刚花了一段时间,发现问题比我最初描述的更复杂。我将使用 Valgrind 来识别问题的根源,或者只是完全按照您的评论重写该函数。在下次发帖之前,我会更广泛地寻找答案。

再次感谢大家的帮助!

最佳答案

str1 = (char*)malloc(sizeof(buffer)+1);
strcpy(str1, buffer); // copy header data into str1

recv 没有以空终止缓冲区。 recv 返回接收到的字节数。因此:

str1 = (char*)malloc(readIn);
memcpy(str1, buffer, readIn); // copy header data into str1
str1[readIn] = 0;

顺便说一句,recv 可能因以下原因失败

sock = (int)arg;

您需要将缓冲区和套接字作为两个不同的参数传递。

您将发现这个模型存在很多问题,但必须运行一些东西,以便您可以学习它。

关于c - 如何在C中调用void指针类型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35638100/

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