gpt4 book ai didi

c - Printf 在 C 程序中有异常行为

转载 作者:太空宇宙 更新时间:2023-11-04 05:09:39 24 4
gpt4 key购买 nike

我正在 Ubuntu 上用 C 语言创建一个服务器,但我遇到了 printf 函数不起作用的问题。这是代码。我希望程序一启动终端就打印“dd”,但它什么都不做。有什么建议吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <netdb.h>

void main(){
printf("dd");
int ds_sock;
struct sockaddr_in my_addr;
ds_sock=socket(AF_INET,SOCK_STREAM,0);

memset(&my_addr,0,sizeof(my_addr));
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(25000);
my_addr.sin_addr.s_addr=INADDR_ANY;

bind(ds_sock,(struct sockaddr *)&my_addr,sizeof(my_addr));

listen(ds_sock,3);
printf("dd");
int ds_sock_acc;
struct sockaddr_in addr;
size_t sin_size = sizeof(struct sockaddr_in);
ds_sock_acc = accept(ds_sock,(struct sockaddr *)&addr,&sin_size);
while(ds_sock_acc==-1) {
printf("connessione non riuscita");
ds_sock_acc = accept(ds_sock,(struct sockaddr *)&addr,&sin_size);
}
printf("connessione riuscita");
close(ds_sock);
close(ds_sock_acc);
}

这个(客户端)按预期工作:

void main(){
printf("dd");
int ds_sock;
ds_sock = socket(AF_INET, SOCK_STREAM,0);

int ret;
struct sockaddr_in Eaddr;
Eaddr.sin_family = AF_INET;
Eaddr.sin_port = htons(25000);
Eaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
ret = connect(ds_sock,(struct sockaddr *)&Eaddr,sizeof(Eaddr));
while(ret==-1){
printf("Errore nel connect");
ret = connect(ds_sock,(struct sockaddr *)&Eaddr,sizeof(Eaddr));
}
printf("connect OK");
close(ds_sock);

}

最佳答案

printf 的输出将被缓冲。

要立即获得输出,您有两个选择:

  • 在字符串 (printf("dd\n");) 的末尾添加换行符 (\n)。这会隐式刷新输出流(即写出缓冲内容)。

  • 在 printf 语句 (fflush(stdout);) 之后显式刷新标准输出流。

至于问题的第二部分,第二个例子产生输出可能只是因为程序是短暂的并且程序退出时输出缓冲区被刷新。否则,它会具有相同的行为(尝试在最后一次关闭后添加一个 sleep(30) 语句以供您自己查看)。

关于c - Printf 在 C 程序中有异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26239606/

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