C 服务器在没有printf()的情况下会卡住,只有printf()才能正常工作,非常奇怪

C 服务器在没有printf()的情况下会卡住,只有printf()才能正常工作,非常奇怪,c,tcp,tcp-ip,C,Tcp,Tcp Ip,我是一个新手,刚刚开始学习关于TCP/IP、客户端和服务器的数据网络 我正在为试图从客户端读取数据的服务器编写一个程序(来自使用scanf()的用户输入)。但最奇怪的是: 服务器将无法执行read()功能 但是,当我将printf()函数放在read()函数之后时,它没有卡住!但是我相信printf()实际上对代码的运行没有任何影响。这让我发疯,我无法理解 简单代码如下: simpleChildSocket = accept(simpleSocket,(struct sockaddr *)&am

我是一个新手,刚刚开始学习关于TCP/IP、客户端和服务器的数据网络

我正在为试图从客户端读取数据的服务器编写一个程序(来自使用
scanf()
的用户输入)。但最奇怪的是:

服务器将无法执行
read()
功能

但是,当我将
printf()
函数放在
read()
函数之后时,它没有卡住!但是我相信
printf()
实际上对代码的运行没有任何影响。这让我发疯,我无法理解

简单代码如下:

simpleChildSocket = accept(simpleSocket,(struct sockaddr *)&clientName,&clientNameLength);
if (simpleChildSocket == -1) {
    fprintf(stderr, "Cannot accept connections!\n");
    close(simpleSocket);
    exit(1);
}

//read data 
returnStatus = read(simpleChildSocket, username, sizeof(username));
printf("Received username: %s\n", username); //*That's where strange happens*

if(returnStatus > 0){
    printf("Yes");
}
else{
    printf("No");
    close(simpleChildSocket);
}

问题是
中的
printf
如果
不打印任何
\n
,则输出会被缓冲但不会刷新。在读取后添加
printf
包含
\n
这就是为什么您可以看到输出,但在这两种情况下代码的行为完全相同


print(“Yes”)
更改为
printf(“Yes\n”)
,类似地,对于
“No”
,问题在于
中的
printf
如果不打印任何
\n
,则输出会被缓冲,但不会被刷新。在读取后添加
printf
包含
\n
这就是为什么您可以看到输出,但在这两种情况下代码的行为完全相同


print(“Yes”)
更改为
printf(“Yes\n”)
,同样,对于
“No”
,除非
read()
返回正值,否则打印
用户名是无效的。这里没有显示太多内容。像
simpleSocket
clientNameLength
username
。它们是如何定义和初始化的?在这些事情中,很可能在字符数组上调用'printf(“%s…”),而字符数组不保证NUL终止。除非
read()
返回了一个正值。这里没有显示太多的内容。例如
simpleSocket
clientNameLength
username
。它们是如何定义和初始化的?在这些内容中,很可能在不保证NUL终止的字符数组上调用了“printf”(%s…)。