C语言入门(字符串正反连接(fgets()、gets()用法))

目录

​编辑

题目描述

输入格式

输出格式

样例输入

样例输出

解题思路


题目描述

所给字符串正序和反序连接,形成新串并输出

输入格式

任意字符串(长度<=50)

输出格式

字符串正序和反序连接所成的新字符串

样例输入

123abc

样例输出

123abccba321

解题思路

输入字符串,把它的逆序字符串存放在原字符串后面,然后输出;

注意事项:
放在原字符串后面时,要从第lenth-1的位置开始放,直到原字符串第一个字符放入为止;

即:

for( i=strlen(a),j=strlen(a)-1; j>=0; i++,j--)
{
  a[i]=a[j];
}

最后要加上' \0';

有一种的思路是,循环不是以原字符串第一个字符结束,而是以原字符串长度的两倍-1结束,

即:(下面这样是不对的,因为a[ strlen(a) ]原来是' \0', 被放字符后,求出长度不对,并且a的长度在改变)

for( i=strlen(a),j=strlen(a)-1; i<2*strlen(a); i++,j--)
{
  a[i]=a[j];
}

代码示例:

#include <stdio.h>
#include <string.h>
int main()
{
    char a[101];
    int i, j = 1;
    gets(a);
    for(i = strlen( a ), j = strlen( a ) - 1; j >= 0; i++, j--)
    {
      a[i] = a[j];
    }
    a[i] = '\0';
 
    puts(a);
    return(0);
}

        对于上述代码,我们可以再dev C++中正常运行,但是如果我们将该代码放到Visual Studio中进行编辑,会发现

    gets(a);

报错,这是因为在C语言中,gets(a)用于从标准输入(键盘)获取一行字符串,并将其保存到字符数组a中。它是一个不安全的函数,因为它无法防止输入的字符串超过目标字符数组的大小,可能导致缓冲区溢出。由于gets()存在安全性问题,它已被标记为不推荐使用,并在C11标准中被移除。

使用gets(a)时,需要注意以下几点:

  1. 字符数组a必须足够大以容纳输入的字符串,包括字符串的结尾空字符\0
  2. 如果输入的字符串长度超过了字符数组的大小,会发生缓冲区溢出,导致未定义的行为。
  3. gets()函数不提供任何限制或验证输入的能力,因此要确保输入的字符串长度不会超过目标字符数组的大小。

        在现代C编程中,推荐使用更安全的函数fgets()替代gets(),因为fgets()可以指定最大读取的字符数,避免缓冲区溢出问题。

  fgets()函数用于从输入流中读取一行字符串,并将其保存到指定的字符数组中。它提供了更安全的方式来读取字符串,因为你可以指定最大读取的字符数,避免缓冲区溢出问题。

fgets()函数的原型如下

char* fgets(char* str, int num, FILE* stream);

参数说明:

  • str:指向目标字符数组的指针,用于保存读取的字符串。
  • num:要读取的最大字符数(包括结尾的换行符和空字符)。
  • stream:要读取的输入流,通常使用stdin表示标准输入。

  fgets()函数的返回值是一个指向目标字符数组的指针,如果读取成功,则返回str;如果发生错误或到达文件末尾,则返回NULL

#include <stdio.h>
#include <string.h>
int main()
{
    char a[101];
    int i, j = 1;
    fgets(a, sizeof(a), stdin);

    for (i = strlen(a), j = strlen(a) - 1; j >= 0; i++, j--)
    {
        a[i] = a[j];
    }
    a[i] = '\0';

    puts(a);
    return(0);
}

        不过在使用fgets()我们又会发现,最终结果成这样

        那是因为fgets()函数将包括换行符\n在内的输入一并读取到字符数组中,因此如果你想去掉换行符,可以使用字符串处理函数strcspn()或手动处理字符串。

最终代码:

#include <stdio.h>
#include <string.h>
int main()
{
    char a[101];
    int i, j = 1;
    fgets(a, sizeof(a), stdin);
   
    // 去掉换行符
    a[strcspn(a, "\n")] = '\0';

    for (i = strlen(a), j = strlen(a) - 1; j >= 0; i++, j--)
    {
        a[i] = a[j];
    }
    a[i] = '\0';

    puts(a);
    return(0);
}

Visual Studio编辑器中C4996 ‘scanf‘: This function or variable may be unsafe.问题解决方案-CSDN博客

C语言练习(检查一个数是否为质数 、剪绳子)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/255596.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【VScode】设置语言为中文

1、下载安装好vscode 2、此时可看到页面为英文&#xff0c;为方便使用可切换为中文 3、键盘按下 ctrlshiftP 4、在输入框内输入configure display language 5、选择中文&#xff0c;restart即可&#xff08;首次会有install安装过程&#xff0c;等待安装成功后重启即可&am…

【玩转Node.JS】=> 之 Buffer(缓冲器)

Node.js 是一个开源、跨平台的 JavaScript 运行时环境 文章目录 Buffer 概念Buffer 的特点创建 BufferBuffer 与字符串的转化 Buffer 的读写 Buffer 概念 Buffer 是一个类似于数组的 对象 &#xff0c;用于表示固定长度的字节序列Buffer 本质是一段内存空间&#xff0c;专门用…

2018年第七届数学建模国际赛小美赛A题空中加油飞行计划解题全过程文档及程序

2018年第七届数学建模国际赛小美赛 A题 空中加油飞行计划 原题再现&#xff1a; 太平洋中部一个小岛上的居民被自然灾害困住。救援人员需要派遣一架轻型飞机运送少量急救药品到岛上&#xff0c;并运送一名重伤者到医疗基地求救。岛上有一个无人值守的简易机场&#xff0c;可以…

css+html横向滚动+固定宽

没什么好说的&#xff0c;快上代码&#xff01; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Do…

2023.12.16 帆软report 官方模板表练习,pymysql

import pymysql# 建立与数据库的连接 conn1 pymysql.connect(host192.168.88.100,port3306,userroot,password123456,dbshopnc_db ) conn2 pymysql.connect(host192.168.88.100,port3306,userroot,password123456,dbbi_db ) # 2.创建游标对象 c1 conn1.cursor() # 3.编写sql…

OpenSSL 3.2.0新增Argon2支持——防GPU暴力攻击

1. 引言 OpenSSL新发布的3.20版本中&#xff0c;引入了一些新特性&#xff0c;包括&#xff1a; post-quantum方法Brainpool曲线QUICArgon2&#xff1a;Argon2 是一种慢哈希函数&#xff0c;在 2015 年获得 Password Hashing Competition 冠军&#xff0c;利用大量内存计算抵…

【面试】Java最新面试题资深开发-微服务篇(1)

问题九&#xff1a;微服务 什么是微服务架构&#xff1f;它与单体架构相比有哪些优势和劣势&#xff1f;解释一下服务发现和服务注册是什么&#xff0c;它们在微服务中的作用是什么&#xff1f;什么是API网关&#xff08;API Gateway&#xff09;&#xff1f;在微服务中它有何…

[学习笔记]批量迁移数据库文件

拷贝数据库文件 首先在本地运行如下SQL语句&#xff0c;查看数据库文件的磁盘位置 SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files默认是保存在C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA目录下 首先复制数据…

mybatis.interceptor.exception.SqLValidateException:Ilegal SQL::......

现象&#xff1a;⬇️ 描述&#xff1a;执行 SQL 没问题&#xff0c;应用代码报错 ⬇️ .mybatis.interceptor.exception.SqLValidateException&#xff1a;Ilegal SQL::SELECT voucherNo FROM voucher ORDER BY CAST(SUBSTRING(voucherNo FROM LOCATE(_, voucherNo) 1) AS U…

C语言KR圣经笔记 4.4作用域规则 4.5头文件 4.6静态变量

4.4 作用域规则 构成一个 C 程序的函数以及外部变量&#xff0c;不需要全都同时编译&#xff1b;程序的源代码可以放在多个源文件中&#xff0c;并且之前编译好的例程可以从库里面加载。需要关心的问题有&#xff1a; 要怎么写声明&#xff0c;才能使变量在编译期间被正确声明…

网络编程『socket套接字 ‖ 简易UDP网络程序』

&#x1f52d;个人主页&#xff1a; 北 海 &#x1f6dc;所属专栏&#xff1a; Linux学习之旅、神奇的网络世界 &#x1f4bb;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f324;️前言&#x1f326;️正文1.预备知识1.1.IP地址1.2.端口号1.3.端口号与进…

三菱plc学习入门(一,认识三菱plc)

今天就开始对三菱的plc软件入一个门&#xff0c;希望小编的文章对读者和初学者有所帮助&#xff01;欢迎评论指正&#xff0c;废话不多说&#xff0c;下面开始学习。 目录 plc的型号介绍 M表示什么&#xff1f; T表示什么&#xff1f; R表示什么&#xff1f; 为什么三菱没…

Pytorch nn.Linear()的基本用法与原理详解及全连接层简介

主要引用参考&#xff1a; https://blog.csdn.net/zhaohongfei_358/article/details/122797190 https://blog.csdn.net/weixin_43135178/article/details/118735850 nn.Linear的基本定义 nn.Linear定义一个神经网络的线性层&#xff0c;方法签名如下&#xff1a; torch.nn.Li…

得帆信息创始人-张桐,受邀出席 BV百度风投AIGC主题论坛

近日&#xff0c;得帆信息创始人兼CEO张桐&#xff0c;作为百度风投被投代表企业创始人受邀出席“向未来&#xff0c;共成长” BV百度风投AIGC主题论坛。 与包括上海市徐汇区相关部门领导、百度集团相关事业部负责人及代表&#xff0c;以及来自国寿资本、中网投、麦顿投资的投资…

install cuda cudnn tersorRT

# 安装 $ ubuntu-drivers devices$ sudo apt-get install nvidia-driver-470-server # 推荐是server&#xff0c;都可以。#delelt sudo apt --purge remove nvidia-* CUDA Toolkit Archive | NVIDIA Developerhttps://developer.nvidia.com/cuda-toolkit-archive CUDA Toolk…

【计算机网络】TCP协议——1.报文格式详解

前言 上篇讲解了UDP报文格式。TCP和UDP是同层协议&#xff0c;都属于传输层&#xff0c;数据来源于上层——应用层 目录 一. TCP协议概述 二. TCP报文格式 1. 两个问题 2. 确认号和序列号 3. 标志位字段 4. 窗口大小 5. 校验和字段 6. 紧急指针与紧急数据 7. 选项字…

后端低代码平台探索总结

业务需求快速变化的背景 我们在对业务需求进行梳理后&#xff0c;在进行程序设计时&#xff0c;对于将来可能发生变化的常量、变量、阀值、开关、条件、公式等等&#xff0c;可能会配置在环境变量或数字字典来支持可配置。但是需求变化往往会更加复杂、更加不可预测&#xff0…

PDF控件Spire.PDF for .NET【转换】演示:将多个图像转换为单个 PDF

如果您想要将多个图像合并为一个文件以便于分发或存储&#xff0c;将它们转换为单个 PDF 文档是一个很好的解决方案。这一过程不仅节省空间&#xff0c;还确保所有图像都保存在一个文件中&#xff0c;方便共享或传输。在本文中&#xff0c;您将学习如何使用Spire.PDF for .NET …

VuePress安装及使用

目录 前言一、依赖环境二、vuepress 安装和使用1.初始化2.将 VuePress 安装为本地依赖3. package.json 中添加脚本4. 新建 docs 文件夹5.启动6. 效果 三、进阶使用1.新增配置文件2.安装搜索插件3.config.js 中增加配置4.效果展示5.注意 前言 VuePress 是一个以 Markdown 为中心…

Vue中英文翻译小结

背景&#xff1a;时局艰难&#xff0c;后端开发被强制写了vue&#xff0c;这不有个需求是中英文翻译&#xff0c;特此记录下&#xff0c;该怎么个翻译法子。 先引入全局的路由国际化文件&#xff0c;zh.js 和 en.js 1.关于插值表达Button里面 {{ $t(reinsop.common.back) }} …