今天在程序运行中发现了一个小bug,对我来说是个难以置信的东西
以下是程序出错的一部分
void FindInfo(STU *s[])
{
int i;
char *name;
name = (char *)malloc(sizeof(char) * 32);
printf("Please input the name you want to find:\n");
scanf("%s", name);
for(i = 0; i < person; i++)
{
if(strcmp(s[i]->name, name) == 0)
{
printf(" name age ");
printf("%d %s ", s[i]->name, s[i]->age);
sleep(3);
break;
}
}
}
运行结果如下
找了好久原因都没找到,后因高人指点得以解惑。在此感谢冬冬大佬。
后来百度了一下\n的作用
printf是以"行"来做缓冲区来刷新stdout的,如果遇到\n会强制立即刷新.否则刷新可能会延迟.因为printf中没有包含\n,内核决定满一行再刷新,而此时程序由于调用accept或recvfrom这类会block的api函数,造成屏幕一直显示不出来,除非收到了tcp连接请求或数据包,系统才会重新决定是否刷新屏幕.