C网络编程错误,因为出现错误\n

C网络编程错误,因为出现错误\n,c,sockets,unix,network-programming,C,Sockets,Unix,Network Programming,我在网络实验室尝试一段代码时遇到了一个奇怪的问题。代码无法工作,因为出现了\n。我在这里写代码: int main() { int sockid; char sbuff[50]; int conn_id,c; struct sockaddr_in serv_addr; sockid=socket(AF_INET,SOCK_STREAM,0); printf("socket created"); memset(sbuff,'0',sizeof

我在网络实验室尝试一段代码时遇到了一个奇怪的问题。代码无法工作,因为出现了\n。我在这里写代码:

int main()
{
    int sockid;
    char sbuff[50];
    int conn_id,c;
    struct sockaddr_in serv_addr;
    sockid=socket(AF_INET,SOCK_STREAM,0);
    printf("socket created");
    memset(sbuff,'0',sizeof(sbuff));
    memset(&serv_addr,'0',sizeof(serv_addr));
    serv_addr.sin_family=AF_INET;
    serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
    serv_addr.sin_port=htons(4242);

    bind(sockid,(struct sockaddr *)&serv_addr,sizeof(serv_addr));

    if( listen(sockid,5)==-1)
    {
        printf("too many connections try again later");
        return -1;
    }

    while(1)
    {
        conn_id=accept(sockid,(struct sockaddr*)NULL,NULL);
        strcpy(sbuff,"msg from server");
        write(conn_id,sbuff,strlen(sbuff));
        close(conn_id);
    }
    return 1;
}
此代码不起作用,但如果我编写:

printf("socket created \n");
代替:

printf("socket created");
它工作得很好。请告诉我为什么会这样

printf("socket created"); 
在刷新标准输出缓冲区之前不会打印。刷新缓冲区的一种方法是使用换行符\n。这就是为什么

printf("socket created\n"); 
被打印出来。所以,问题不在于printf,而在于超出了这一点


正如Jon所说,检查系统调用返回值是否存在错误情况将帮助您找到问题。

欢迎使用堆栈溢出。请尽快阅读这一页。你在错误检查方面有点欠缺,是吗?您确实检查了
listen()
调用;那很好。但至少还有4个其他系统调用也需要检查。您的
memset()
调用缺少反斜杠:
'0'
'\0'
非常不同。但是,
printf()
中的换行符如何使事情发生变化并不明显。您所说的“不工作”是什么意思?这是正确的。此外,您还可以通过调用
fflush(stdout)
强制刷新缓冲区(即要打印到屏幕上的文本)。