小编cou*_*sto的帖子

如何在不使用fgets包含换行符的情况下从输入中获取字符串?

我正在尝试在其他地方写一个输入的字符串,并且不知道如何取消作为此字符串的一部分出现的新行,我用stdin和fgets获取.

 char buffer[100];
 memset(buffer, 0, 100);
 fgets(buffer, 100, stdin);
 printf("buffer is: %s\n stop",buffer);
Run Code Online (Sandbox Code Playgroud)

我试图限制fgets获取的数据量,并限制写入多少数据,但新行仍然存在.我怎样才能简单地将输入的字符串放到最后写的字符中?

c stdin newline fgets

11
推荐指数
2
解决办法
2万
查看次数

如何接受多个客户端到TCP服务器?

我目前有一个TCP服务器设置,可以接受来自客户端的连接并回显客户端输入的任何内容.如何让多个客户端连接到服务器并将其输入发送到所有客户端?

看来我应该分叉,但我不完全确定如何......

在服务器上,我应该放置一个从accept(或listen?)开始的无限循环,当有新连接时它会分叉吗?然后在子进程中,我将不得不从先前的进程关闭套接字并连接到新的进程,但我再次不确定.

关于forks和socket操作,伪代码会是什么样子?我猜:

while(1) //before connection or accept?

pid = fork()

if(pid==0)
  // open socket from client
  // run the rest of the code 
  // end process when client disconnects
else
  // close socket from client
Run Code Online (Sandbox Code Playgroud)

c sockets tcp client-server

7
推荐指数
1
解决办法
2万
查看次数

如何使用民意调查来接受多个客户?(TCP服务器)(C)

这项轮询业务似乎是由疯子编写的,我不确定如何使用它来允许多个客户端连接到服务器,然后将其输入发送给所有其他客户端。

因此,如果我想让三个客户加入,我将需要以下内容:

  ufds[0].fd = sd;
  ufds[0].events = POLLIN;
  ufds[1].fd = sd2;
  ufds[1].events = POLLOUT;
  ufds[2].fd = sd2;
  ufds[2].events = POLLOUT;
  ufds[3].fd = sd2;
  ufds[3].events = POLLOUT;
  ufds[4].fd = sd2;
  ufds[4].events = POLLOUT;
Run Code Online (Sandbox Code Playgroud)

然后到底该做些什么以便可以读入和写出消息?

c tcp chat client-server poll-syscall

6
推荐指数
1
解决办法
1万
查看次数

为什么sprintf在一个例子而不是下一个例子中工作?

这是我的代码:

time_t tim=time(NULL);                        // acquire time information
struct tm * now=localtime(&tim);

char cyear[3], cmonth[2], cday[2], chour[2], cmin[2];           
int test = 13;
sprintf(cyear, "%d", test);
sprintf(cmonth, "%d", now->tm_mon+1);
sprintf(cday, "%d", now->tm_mday);
sprintf(chour, "%d", now->tm_hour);
sprintf(cmin, "%d", now->tm_min);

printf("cyear is: %s\n",cyear);
printf("cmin is: %s\n",cmin);
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

cyear is:

cmin is: 7
Run Code Online (Sandbox Code Playgroud)

输出也不适用于cmonth或cday,但chour和cmin似乎给出了正确的输出.这里发生了什么?

c string printf integer output

2
推荐指数
1
解决办法
72
查看次数

我在mergesort中传递此数组的方式有什么问题?

当我尝试对我传递的数组做任何事情时,我得到了段错误.我可能正在做一些简单的愚蠢错误,但我没有看到它.

合并通话:

merge(&(array[size]), 0, size-1);
Run Code Online (Sandbox Code Playgroud)

合并

void merge(people* pe,int low,int high)
{   //cout<< pe[0].fname << endl;  
    if(low < high)
    {   int mid = (low+high)/2;
        merge(pe, low, mid);
        merge(pe, mid+1, high);
        mymerge(pe, low, mid, high);
    }
}
Run Code Online (Sandbox Code Playgroud)

我进入那个cout,看看我是否可以访问那里的阵列,我立即得到了一个段错误.我在那里做错了什么?(我可以输出array [0] .fname,这样结构数组本身就没有问题)

c++ arrays parameters mergesort

0
推荐指数
1
解决办法
43
查看次数

在 TCP 客户端中取消指向不完整类型的指针?(C)

我正在尝试用 C 语言制作一个服务器和一个客户端(TCP),它们将充当一个简单的聊天系统。我对这些事情知之甚少,并且一直在参考这个服务器示例这个客户端示例

注意:按照我有限的研究建议,我将 bzero() 和 bcopy() 更改为 memset() 和 memcpy(),但是在这两种情况下都发生了错误。除此之外,我自己的客户端仅在格式和输出方面与链接示例不同。

    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent * server;

    char buffer[256];

    if (argc < 3) {
        fprintf(stderr,"usage %s hostname port\n", argv[0]);
        exit(0);
    }

    portno = atoi(argv[2]);

    sockfd = socket(AF_INET, SOCK_STREAM, 0);

    if (sockfd < 0)  { perror("failed_socket_open"); exit(1); }

    server = (struct hostent *)gethostbyname(argv[1]);

    if (server == NULL) {
        fprintf(stderr,"host isn't real, everything is a lie\n");
        exit(0);
    }

    memset((char *) &serv_addr, 0, sizeof(serv_addr)); …
Run Code Online (Sandbox Code Playgroud)

c sockets tcp client-server

0
推荐指数
1
解决办法
921
查看次数