在VS2020中C语言获取字符串长度编程中,代码输入出现一个警告,警告是C6054,怎么解决?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在VS2020中C语言获取字符串长度编程中,代码输入出现一个警告,警告是C6054,怎么解决?相关的知识,希望对你有一定的参考价值。

警告 C6054 可能没有为字符串“text”添加字符串零终止符。 Project17
警告 C6054 可能没有为字符串“connect”添加字符串零终止符。 Project17

代码如下:
#include<stdio.h>
#include<string.h>

int main()

char text[50], connect[50];
int num;

printf("输入一个字符串:\n");
scanf_s("%s", text,50);
num = strlen(text);
printf("字符串的长度为:%d\n", num);
printf("再输入一个字符串:\n");
scanf_s("%s", connect,50);
num = strlen(connect);
printf("字符串的长度为:%d\n", num);
strcat_s(text,50,connect);
printf("将两个字符串进行连接:%s\n", text);
num = strlen(text);
printf("连接后的字符串长度为:%d\n", num);

return 0;

参考技术A 无需理会该警告,由于字符串数组是通过scanf_s赋值的,必然有字符串结束符
你要是觉得难受,可以在定义数组时把数组元素直接全部置0,避免
char text[50]=0, connect[50]=0;本回答被提问者和网友采纳

c语言套接字编程中的listen()队列长度?

【中文标题】c语言套接字编程中的listen()队列长度?【英文标题】:listen() queue length in socket-programing in c? 【发布时间】:2012-10-05 07:04:01 【问题描述】:

我在 Linux 中编写了两对代码(server.cclient.c)。一个用于 UNIX 域 AF_UNIX 另一个用于 INTERNET 域 AF_INET。两者都工作正常!

listen()both servers 中被调用 因为积压队列长度 = 3

listen(sockfd, 3);  

在 UNIX 域 (AF_UNIX) 中: 当一个客户端与服务器连接时,如果我尝试将更多客户端连接到服务器。三个在队列中,第四个的请求被拒绝。 (如我所愿 - 等待队列中的 3 个)。

在 INTERNET 域 (AF_INET) 中: 超过三个的请求保留在待处理队列中。

为什么即使积压队列长度为 3,来自第四个客户端的请求也没有被拒绝?为什么listen()(和其他)协议的行为依赖于协议?

【问题讨论】:

我不太明白你的意图......你为什么会因为队列已满而拒绝客户? @KarolyHorvath:我的意思是,如果我给出等待队列长度,它应该被拒绝。我想知道这件事。 我认为任何不符合我们预期的 API 参数都应该困扰我们,因为这意味着我们不理解它。 【参考方案1】:

操作系统实际上为传入的 TCP 连接使用了比listen() 指定的更大的队列。多大取决于操作系统。

 listen(int socket_fd, int backlog)  

对于给定的侦听套接字,内核维护两个队列。

    一个不完整的连接队列 - SYN 已经到来,但三向握手 (TCP) 没有完全完成。 (SYN_RCV 状态) 完整的连接队列 - 完成了三向握手。 (已建立状态)

backlog 参数历史上指定两个队列的总和。但是对于 backlog 的含义没有正式的定义。

伯克利派生的实现为积压工作添加了一个软糖因素。所以总队列length = factor * backlog

W. Richard Stevens 的书中给出了非常详细和深入的解释。在 Stevens, Fenner, Rudoff, "Unix Network Programming: The Sockets Network API", Volume 1, Third Edition, Page 108 中还可以找到显示七个操作系统值的表格。

【讨论】:

例如在 Linux 2.4.7 上,backlog 的 3 个分配给 listen() 导致最多 6 个连接排队。 在您的回答中编辑了更多细节。谢谢! CentOS 6.6 2.6.32-504.el6.x86_64 积压队列为积压参数+1【参考方案2】:

平台有权根据其最小值和默认值向上或向下调整指定的积压。如今,默认值更像是 500 而不是 5,这是它在 1983 年左右开始的地方。你不能依赖它是你指定的,而且没有 API 可以找出它到底是什么,也没有明显的希望它比默认值短的有效应用程序原因。

【讨论】:

有些人试图用它来限制并发连接数。不是。

以上是关于在VS2020中C语言获取字符串长度编程中,代码输入出现一个警告,警告是C6054,怎么解决?的主要内容,如果未能解决你的问题,请参考以下文章

C语言中,对于不知道长度的数组怎样输入。。。

c语言字符串的长度怎么看

C语言字符串长度如何数?

C语言字符串长度如何数?

Rust程序设计语言-字符串长度

C语言编程函数localtime_s在VS 2020中写的程序参数错误,参数怎么写?