当前位置: 首页 > news >正文

题目 1124: C语言训练-大、小写问题

问题描述:

输入一串字符,将其中的大写变成小写,若不为大写则原样输出

样例输入:

A123b

样例输出:

a123b

问题分析:

潜在的缓冲区溢出风险:

代码声明了一个大小为 100 的字符数组 str 来存储输入的字符串,但没有检查输入字符串的长度是否超过数组的大小,这可能导致缓冲区溢出。为了避免这种情况,可以在调用 fgets 函数时限制输入的字符数,例如 fgets(str, sizeof(str), stdin); 可以改为 fgets(str, 100, stdin);。

循环条件:

在 for 循环中,循环条件是 str[i] != '\0',这是检查字符串是否结束的常见方法,但这样的写法可能会导致数组越界。建议改为i < sizeof(str)来确保不会访问超出数组界限的内存。

字符串结束符:

fgets 函数会将换行符 \n 也读取并存储在字符串中,因此在输出时会将其一同打印出来。如果不希望打印换行符,可以在输出之前将其替换为空字符。

代码分析:

这段代码的主要功能是将输入的字符串中的大写字母转换为小写字母,并输出结果。

isupper 函数

用于检查字符是否为大写字母,若是则返回非零值,否则返回零;

tolower 函数

用于将大写字母转换为小写字母,如果参数不是大写字母,则返回原始字符。

fgets函数

fgets 函数用于从标准输入流(stdin)中读取一行字符,并存储到指定的字符串数组中。它的参数包括要存储输入内容的字符串数组、最大读取字符数以及要读取的流(通常是 stdin)。这个函数会将读取到的字符放入指定的数组中,包括换行符 \n,并在字符串末尾添加一个空字符 \0 来表示字符串的结束。

代码实现:

#include <stdio.h>
#include <ctype.h>int main() {char str[100]; fgets(str, sizeof(str), stdin); for (int i = 0; str[i] != '\0'; i++) {if (isupper(str[i])) { // 如果是大写字母printf("%c", tolower(str[i])); // 转换为小写字母并输出} else {printf("%c", str[i]); // 否则直接输出原字符}}return 0;
}

相关文章:

  • matlab一维二维和三维RBF插值方法
  • 第7.1章:StarRocks性能调优——查询分析
  • 多输入时序预测|WOA-CNN|鲸鱼算法优化的卷积神经网络时序预测(Matlab)
  • 计算机网络面经-从浏览器地址栏输入 url 到显示主页的过程?
  • LeetCode 2433.找出前缀异或的原始数组
  • 5 buuctf解题
  • 淘宝京东1688实时API商品详情数据解析:获取市场最新趋势
  • 基于Java SSM框架实现高考填报信息系统项目【项目源码】
  • 第6.3章:StarRocks查询加速——Bucket Shuffle Join
  • fastJSON 字符串转对象
  • CCAA审核员职业健康安全管理体系基础考试大纲
  • HTTPS对HTTP的加密过程
  • ES6 | (一)ES6 新特性(上) | 尚硅谷Web前端ES6教程
  • 突破编程_C++_设计模式(单例模式)
  • stack类别
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Docker 笔记(2):Dockerfile
  • egg(89)--egg之redis的发布和订阅
  • git 常用命令
  • httpie使用详解
  • java8 Stream Pipelines 浅析
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • leetcode46 Permutation 排列组合
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • React-生命周期杂记
  • React系列之 Redux 架构模式
  • Unix命令
  • vue的全局变量和全局拦截请求器
  • yii2权限控制rbac之rule详细讲解
  • 分布式任务队列Celery
  • 给第三方使用接口的 URL 签名实现
  • 解决iview多表头动态更改列元素发生的错误
  • 浏览器缓存机制分析
  • 使用API自动生成工具优化前端工作流
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 云大使推广中的常见热门问题
  • 《天龙八部3D》Unity技术方案揭秘
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • # Panda3d 碰撞检测系统介绍
  • (4)(4.6) Triducer
  • (编译到47%失败)to be deleted
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)计算机毕业设计ssm电影分享网站
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一)kafka实战——kafka源码编译启动
  • (译) 函数式 JS #1:简介
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)scrum常见工具列表
  • ******之网络***——物理***
  • .NET CORE Aws S3 使用
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .NET单元测试
  • .NET框架
  • ??eclipse的安装配置问题!??