c/c++:gets(),fgets(),puts(),fputs(),strlen(),字符串拼接函数

news2025/1/11 22:36:31

c/c++:gets(),fgets(),puts(),fputs(),strlen(),字符串拼接函数

2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,此时学会c++的话,
我所知道的周边的会c++的同学,可手握10多个offer,随心所欲,而找啥算法岗的,基本gg
提示:系列c++学习的基础和高阶知识,用于公司生产实践中,实实在在的公司部署产品要用的,因为c++速度快,
而java和Python速度慢,自然往硬件里面部署算法啥的,都得用c++或者c,因此本科学的c很重要,后来的Python或者java就没有那么重要了,
c/c++系列文章:
【1】c++:c语言优缺点,visual studio2019如何新建项目,写hello world程序
【2】c/c++:gcc安装,gcc编译hello world文件,system函数调用系统命令,sleep函数
【3】linux下gcc的编译过程和功能,预处理,编译,汇编,链接,.c预处理为.i文件.s文件.o文件.exe文件
【4】c/c++:windows平台下依赖的动态库,c底层是汇编语言,程序断点调试,反汇编,vs快捷键
【5】c/c++:数据类型,常量变量,标识符,有符号整型,无符号unsigned,字符类型,字符串类型,实数类型,浮点型,科学计数法
【6】c/c++:2进制、8进制、10进制、16进制和进制之间的转换,c语言输出匹配格式%
【7】c/c++:原码,反码,补码和常见的数据类型取值范围,溢出
【8】c/c++:类型限定符,printf输出格式,putchar,scanf,getchar
【9】c/c++:算术运算符,赋值运算,逻辑运算,比较运算,三目运算,逗号运算,数据类型转换
【10】c/c++:顺序结构,if else分支语句,do while循环语句,switch case break语句
【11】c/c++:for循环语句,分号不可省略,表达式可以省略,猜数字游戏,跳转语句continue,break,避免写goto
【12】c/c++:一维数组,初始化数组,循环打印数组,计算数组存储空间,数组元素个数,数组逆序算法
【13】c/c++:二维数组,数组的行数和列数求法sizeof,数组初始化不同形式,5个学生,3门功课,求学生总成绩和功课总成绩
【14】c/c++:visual studio的代码快捷键,VS设置自定义默认代码,使用快捷键
【15】c/c++:三维数组,字符数组和字符串,统计字符串中字符出现的频次,scanf输入空格,正则匹配表达式


文章目录

  • c/c++:gets(),fgets(),puts(),fputs(),strlen(),字符串拼接函数
    • @[TOC](文章目录)
  • c/c++:gets()函数
  • 怎么更安全呢?fgets()函数
  • puts()函数
  • fputs()函数
  • strlen()函数,很重要
  • 字符串拼接函数,手撕代码
  • 总结

c/c++:gets()函数

在这里插入图片描述
返回一个char*字符指针
等价于char str[];
它获取一个字符串的首地址
指针嘛,之后我们会讲清楚,它就是地址

参数是你要存储的空间;
char *s;代表你要存储的地址

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<Windows.h>

void f51(void)
{
    //get string
    char str[100];
    gets(str);//

    printf("%s", str);
}

int main(void)
{
    f51();

    system("pause");
    return 0;
}

在这里插入图片描述
这比scanf简单一丢丢
不用搞格式了
直接gets(str),把字符串存入str中即可

在这里插入图片描述
这个好像可以直接获取空格哦

在这里插入图片描述
它和scanf一样,容易因为字符多输入而越界溢出
即不安全!!!!!!!!!!!!!

在这里插入图片描述

怎么更安全呢?fgets()函数

在这里插入图片描述
作用也是和gets一样的
参数多一点
char *s是字符串地址
size是字符数量??
读取字符串的位置,你看看是文件里面来的?还是键盘上读?
键盘对应stdin标准输入文件

返回值也会字符串的首地址哦

你一共定义一个10大小
它自动预留/0的位置
然后剩下的你可以放字符了

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<Windows.h>

void f51(void)
{
    //get string
    char str[10];
    //gets(str);//
    fgets(str, sizeof(str), stdin);//仨餐参数,它预留一个\0

    printf("%s", str);
}

int main(void)
{
    f51();

    system("pause");
    return 0;
}

在这里插入图片描述

在这里插入图片描述
看见没,它会提前给您把\0赶上去,
所以你最多只能输入9个字符哦

它好像会读走\n
如果你长度不足10
它就会自动读走\n

在这里插入图片描述
也就是空间足够的情况下,它可以考虑读一个\n
如果你字符占满了,空间不够的情况下,它基本就省掉了\n

在这里插入图片描述

puts()函数

在这里插入图片描述
类似printf
不过自动加\n

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<Windows.h>

void f51(void)
{
    //get string
    char str[10];
    //gets(str);//
    fgets(str, sizeof(str), stdin);//仨餐参数,它预留一个\0

    //printf("%s", str);

    puts(str);

}

int main(void)
{
    f51();

    system("pause");
    return 0;
}

在这里插入图片描述
好说吧

返回值:
非负数,成功
-1失败

在这里插入图片描述

fputs()函数

输出到指定文件,
studio的输出般stdout标准输出

后续我们将将其输出到文件
在这里插入图片描述
它不会写\0哦

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
#include<Windows.h>

void f51(void)
{
    //get string
    char str[10];
    //gets(str);//
    fgets(str, sizeof(str), stdin);//仨餐参数,它预留一个\0

    //printf("%s", str);

    //puts(str);
    fputs(str, stdout);//标准输出


}

int main(void)
{
    f51();

    system("pause");
    return 0;
}

在这里插入图片描述
也不好自动给你加\n哦
懂?

因为我们的目的是写文件里面
写在屏幕上的话最好加\n
好说

easy

strlen()函数,很重要

在这里插入图片描述
获取字符串的有效长度,不包含\0


void f52(void)
{
    char str[] = "hello world";//11长度
    printf("%d\n", strlen(str));//string.h头文件下的操作函数

}

int main(void)
{
    f52();

    system("pause");
    return 0;
}

在这里插入图片描述
有效长度

使坏,给它中间放一个\0呢,它会识别为多少?
因为有效字符串是\0结束

strlen遇到\0就读结束哦

void f52(void)
{
    char str[] = "hello\0world";//11长度
    printf("%d\n", strlen(str));//string.h头文件下的操作函数

}

在这里插入图片描述
自己手撕strlen的代码,简单



void f52(void)
{
    char str[] = "hello\0world";//11长度
    printf("%d\n", strlen(str));//string.h头文件下的操作函数



    int index = 0;//索引
    int len = 0;//长度
    while (str[index++] != '\0')
    {//每次循环index加
        len++;
    }
    printf("%d\n", len);//string.h头文件下的操作函数

}

int main(void)
{
    f52();

    system("pause");
    return 0;
}

在这里插入图片描述
很容易了

字符串拼接函数,手撕代码

在这里插入图片描述
这种拼接,你可以自己写代码,也可以用函数
最后需要补一个\0
拼接

咱们手撕一波试试


void f53(void)
{
    char str1[] = "hello";
    char str2[] = "world";
    char str3[100] = { 0 };//循环拼接

    int i = 0;
    while (str1[i] != '\0')
    {//遇到结束
        str3[i] = str1[i++];//同时推进
    }
    int j = 0;
    while (str2[j] != '\0')
    {//遇到结束
        str3[i+j] = str2[j++];//同时推进
    }
    str3[i + j] = '\0';//手动补一个字符串结束

    puts(str1);
    puts(str2);
    puts(str3);

}

int main(void)
{
    f53();

    system("pause");
    return 0;
}

在这里插入图片描述


总结

提示:重要经验:

1)
2)学好c++,即使经济寒冬,手握10个大厂offer绝对不是问题!
3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言程序环境与预处理回顾总结

大概讲解与铺垫 首先&#xff0c;什么叫c语言的源代码&#xff1f;也就是我自己写的.c文件里面的代码&#xff0c;这个就叫做源代码。然后需要知道的是计算机他只认识二进制&#xff0c;因此他只能接收与执行二进制指令。也就是可执行的机器指令。然后我们必须得知道&#xff…

JavaWeb——tomcat(安装使用)

目录 WEB服务器-Tomcat 服务器概述 Web服务器 Tomcat Tomcat下载 安装与卸载 启动与关闭 WEB服务器-Tomcat 服务器概述 服务器硬件&#xff1a; 指的也是计算机&#xff0c;只不过服务器要比我们日常使用的计算机大很多。 服务器&#xff0c;也称伺服器。是提供计算服务…

【数据结构】第十一站:链式二叉树

目录 一、二叉树的创建 二、二叉树的遍历 1.前序中序后序遍历 2.层序遍历 三、二叉树的节点个数以及高度等 四、二叉树的构建和销毁 五、DFS和BFS 一、二叉树的创建 为了方便后面的讨论&#xff0c;我们在这里先手撕一颗二叉树 typedef int BTDateType; typedef struct …

Qt Designer

Qt Designer——即Qt设计师&#xff0c;是QT项目开发的可视化图形界面编辑器&#xff0c;通过设计师可以很方便地创建图像界面文件*.ui&#xff0c;然后将ui文件应用的源代码中&#xff0c;做到所见即所得&#xff0c;让界面的设计变得十分简单。下面介绍Qt Designer的简单使用…

使用PowerShell自动部署ASP.NetCore程序到IIS

asp.net core 安装asp.net core sdk https://dotnet.microsoft.com/en-us/download/dotnet/3.1 创建asp.net core项目 dotnet new webapi运行项目 访问https://localhost:5001/WeatherForecast iis配置 安装iis 以管理员身份运行powershell Enable-WindowsOptiona…

【计算机网络】学习笔记:第二章 物理层(五千字详细配图)【王道考研】

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…

Windows中Seata连接Linux中的nacos的配置

目录 前言&#xff1a; Seata配置教程&#xff1a; file.conf: ​编辑 配置代码&#xff1a; registry.conf: ​编辑 nacos-config.sh: config.txt: 前言&#xff1a; 许多博主&#xff0c;把两个软件都安装在同一个系统中&#xff0c;但是有些人估计是装在不同的环境下…

支付系统设计:收银台设计二

文章目录 前言1. 接口校验1.1 Chains1.2 Checker1.2.1 AbstractChecker1.2.2 TokenChecker1.2.3 OrderChecker1.2.4 UserInfoChecker1.2.5 BaseInfoChecker1.2.6 SignChecker 1.3 ApiFilter 2. 下单3. 收银台首页2.1 OrderInfoResolver2.2 UserBaseInfoResolver 4. 执行流程总结…

企业宁愿花 15K 重新招人,也不愿意花 10K 留住老测试员?

金三银四即将进入尾声&#xff0c;大家逐渐收敛了跳槽涨薪的想法&#xff0c;准备收收心等待过年。不置可否&#xff0c;年后必定又是一波跳槽季&#xff0c;通过跳槽才能涨薪已经成为了不少求职者内心默认的定理。 不知道什么时候开始&#xff0c;公司不能满足加薪的要求&…

leetcode 812. 最大三角形面积

题目 给你一个由 X-Y 平面上的点组成的数组 points &#xff0c;其中 points[i] [xi, yi] 。从其中取任意三个不同的点组成三角形&#xff0c;返回能组成的最大三角形的面积。与真实值误差在 10-5 内的答案将会视为正确答案。 示例 1&#xff1a; 输入&#xff1a;points [[…

手把手带你实现通讯录C语言

通讯录大家都很熟悉了&#xff0c;一个联系人包括姓名&#xff0c;年龄&#xff0c;性别&#xff0c;电话&#xff0c;地址等&#xff1b; 那我们想一想我们所学的数据类型&#xff08;int,float,double等都是单一的相同类型 &#xff08;属于内置类型&#xff09;&#xff09;…

#详细介绍!!! 造成死锁的原因以及解决方案!

本篇主要是介绍什么是死锁&#xff0c;已经死锁产生的原因&#xff0c;如果避免死锁。根据上述的几个问题让我们来阅读本篇文章。 目录 1. 什么是死锁 2. 形成死锁的原因&#xff08;四个必要条件&#xff09; 3. 如果有效避免死锁 1. 什么是死锁 死锁主要是锁彼此间进行锁等…

FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持

目录 1、前言2、JPEG-LS图像压缩理论3、JPEG-LS图像压缩性能介绍4、JPEG-LS图像压缩时序介绍5、JPEG-LS图像压缩输出压缩流6、工程源码和仿真7、福利&#xff1a;工程代码的获取 1、前言 JPEG-LS&#xff08;简称JLS&#xff09;是一种无损/有损的图像压缩算法&#xff0c;其无…

1 Go语言开发环境搭建详细教程【Go语言教程】

Go语言开发环境搭建【Win、Linux、Mac】 1 SDK下载 官网地址&#xff1a;golang.org,因为一些原因国内可能无法访问。可以使用下面第二个链接。国内地址访问&#xff1a;https://golang.google.cn/dl或者https://www.golangtc.com/download 根据自己操作系统版本&#xff0c;下…

30天学会《Streamlit》(9)

30天学会《Streamlit》是一项编码挑战&#xff0c;旨在帮助您开始构建Streamlit应用程序。特别是&#xff0c;您将能够&#xff1a; 为构建Streamlit应用程序设置编码环境 构建您的第一个Streamlit应用程序 了解用于Streamlit应用程序的所有很棒的输入/输出小部件 第9天 - …

超高精度PID控制器的特殊功能(4)——分程控制功能及其应用

摘要&#xff1a;分程控制作为一种典型的复杂控制方法之一&#xff0c;常用于聚合反应工艺、冷热循环浴、TEC半导体温度控制、动态平衡法的真空和压力控制等领域。为快速和便捷的使用分程控制&#xff0c;避免采用PLC时存在的控制精度差和使用门槛高等问题&#xff0c;本文介绍…

pyqt6+vtk

这里用PyQt6vtk9.2.6 pip install PyQt6 pyqt6-tools vtk这里拉了一个水平布局 然后水平布局中加入QWidget&#xff0c;object name改为vtkWidget 右键Promote Widgets Promoted class name: QVTKRenderWindowInteractor Header file: vtkmodules.qt.QVTKRenderWindowInterac…

文章改写神器在线-AI续写文章生成器

AI续写生成器 AI续写生成器是一种利用人工智能技术的创意工具&#xff0c;能够提高写作效率&#xff0c;为营销推广带来全新的可能性。无论你是写手、广告人员还是市场营销人员&#xff0c;这个工具都能够有效地解决你在写作中遇到的难题。 在内容创作行业中&#xff0c;原创…

Amazon Linux2部署安装Jenkins

先决条件 服务器配置要求 256 MB of RAM 1 GB of drive space (although 10 GB is a recommended minimum if running Jenkins as a Docker container) 需要部署安装JDK环境部署安装的Jenkins版本为Version 2.400 部署安装JDK 1. 下载JDK软件包 wget https://corretto.aws/…

Altium Designer借助嘉立创添加PCB封装和3D模型

目录 引言打开立创专业版EDA&#xff0c;建立项目从立创商城找到器件编码添加PCB封装导出和修改3D封装 引言 由于使用Altium Designer的频率并不是特别高&#xff0c;所以每一次使用总是得东跌西撞的才回忆起一些使用步骤。因此&#xff0c;想在这里记录一下Altium Designer借…