我正在尝试阅读Beej的编程指南之后做一个小聊天程序。
然后我在考虑程序本身的基础知识,我不知道如何打印recv()的输出并同时获取send()的输入,因为客户端总是可以写一些东西,发送,但是如何在他试图输入的同时打印一些东西呢?
我想到了线程,我对它们有了一些了解,我创建了两个简单的线程:第一个,每隔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;
}
答案 0 :(得分:1)
您的代码中有undefined behavior:您在input
中没有未初始化的指针getinput
。
未初始化(非静态)局部变量具有不确定的值,并且它似乎是随机的。由于值是不确定的(并且看似随机),scanf
调用将写入内存中的某个未知位置,覆盖那里的任何内容。
您可以通过将input
设为数组来轻松解决此问题。