gpt4 book ai didi

c - 实时输入/输出(类似聊天)

转载 作者:行者123 更新时间:2023-11-30 15:30:41 24 4
gpt4 key购买 nike

在阅读了 Beej 的编程指南后,我正在尝试制作一个小聊天程序。

然后我在思考程序本身的基础知识,我不知道如何打印recv()的输出并同时获取send()的输入,因为客户端总是可以写一些东西并且发送,但是当他尝试输入时怎么可能也打印一些东西?

我考虑了线程,并且了解了一些关于它们的知识,我创建了 2 个简单的线程:第一个线程每 3 秒打印一个句子,第二个线程获取输入,这个小程序当然有一个很多问题,例如。如果您开始输入,而另一个线程需要打印一些内容,它只会获取您所写的内容,并使用其自身的输出来打印它。

这是代码,我尝试重新创建它,希望你们能帮助我..

pthread_t tid[2];

void* printse();
void* getinput();

int main(int argc, char *argv[])
{

int error;
error = pthread_create(&(tid[1]), NULL, &getinput, NULL);

if(error != 0)
{
printf("ERROR\n");
} else {
printf("NOERROR\n");
}

error = pthread_create(&(tid[2]), NULL, &printse, NULL);

if(error != 0)
{
printf("ERROR\n");
} else {
printf("NOERROR\n");
}

sleep(5000);

return 0;
}

void* printse()
{
while(1)
{
printf("POTATO\n");
sleep(3);
}
return NULL;
}

void* getinput()
{
char *input;
while(scanf("%s", input) != EOF)
{
printf("-%s\n", input);

}

return NULL;
}

最佳答案

您有undefined behavior在您的代码中:您在 getinput 中有一个未初始化的指针 input

未初始化(非静态)局部变量具有不确定的值,并且看起来是随机的。由于该值是不确定的(并且看似随机),scanf 调用将写入内存中的某个未知位置,覆盖那里的任何内容。

您可以通过将 input 设为数组来轻松解决此问题。

关于c - 实时输入/输出(类似聊天),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25481513/

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