【C语言】三种方式实现字符串(char*)/字符数组(char[ ])输入输出

嵌入式学习——C语言字符数组及其函数 1)用于存放字符型数据的数组称为字符数组。2)在C语言中,字符数组中的一个元素只能存放一个字符。一般形式:1)char 数组名 [常量表达式];一维字符数组2)char 数组名[常量表达式1][常量表达式2];二维字符数组。 阅读详情
AI摘要

本文介绍了四种在C语言中处理字符串输入输出的方法:gets()和puts()用于基本的字符数组操作,getchar()用于逐个字符接收输入,scanf()用于格式化输入,以及使用指向字符串的指针。特别强调了scanf()后清除缓冲区的重要性。

前言

  1. 做题时经常需要用到字符串,写篇笔记加强记忆,本文用 4个例子实现字符串的输入输出操作。

  2. scanf(); 从键盘输入数据时,遇到 “空格”、“回车” 都会终止。若要接受空格,使用 gets(); 代替 scanf();

  3. 多个 scanf(); 同时出现时,上一个 scanf(); 残留的 “回车” 会导致下一个 scanf(); 只读到了 “空格”,若要避免,需在使用 scanf(); 后,使用 getchar();

  4. 因为是字符串操作,所以要引入#include <string.h>

方法一:gets( )/puts( )

char str1[20];//必须要定义长度
gets(str1);
puts(str1);

方法二:getchar( )

getchar() - 字符输入函数,没有参数,从输入缓冲区里面读取一个字符 - 「 一次只能读取一个字符 」
EOF(-1) - end of file 文件结束标志 - 键盘上用 ctrl + z 实现

int str2 = 0;
while ((str2 = getchar()) != EOF)
{
	putchar(str2);
}

该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读取错误,则返回 EOF(-1)。所以 getchar() 函数返回值要用 int 整型变量来存储

方法三  scanf( )

char str3[20];//字符数组
scanf("%s",str3);
printf("%s\n",str3);
getchar();//清除缓冲区

方法四  指向字符串的指针 + 中间变量

char tmp[20];
char *str4;
gets(tmp);
str4=tmp;
puts(str4);

注:由于定义指针时,该指针并未初始化,所以不可以直接把输入的值赋给指针,必须经过一个中间变量。 

代码汇总

int main()
{
	//方法一
	char str1[20];//必须要定义长度
	gets(str1);
	puts(str1);

	//方法二,由于是不断接收数,所以不做测试
	/*int str2 = 0;
	while ((str2 = getchar()) != EOF)
	{
		putchar(str2);
	}*/

	//方法三
	char str3[20];//字符数组
	scanf("%s", str3);
	printf("%s\n", str3);
	getchar();//清除缓冲区

	//方法四
	char tmp[20];
	char* str4;
	gets(tmp);
	str4 = tmp;
	puts(str4);
}

C语言基础知识(2) c语言基础知识(常用基础函数、冒泡排序、二维数组、函数、指针、内存分配、位运算、宏定义、结构体) 阅读详情

相关推荐

3. char、字符串、字符串数组、二维字符数组、char[] 的区别与联系

类型定义存储位置可否修改应用二维字符数组栈区✅ 可修改临时变量字符指针数组栈区+文字区❌ 只读常量表、命令表字符指针char *p栈区(指针变量)❌ 指向只读字符串参数字符数组char str[]栈区✅ 可修改缓冲区、输入输出知识点关键理解"Hello"是字符串常量(只读)char *p指向字符串首地址char str[]可修改的数组副本存放字符串指针的数组真正的二维字符数组p[i]等价于*(p+i)整个数组字节大小当前字符串长度项目含义list数组,包含若干个。

2301_78486960的博客 656

C语言(字符串输入)

字符串输入

little_startoo的博客 50万+

C语言最全入门笔记

c语言入门C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是...

编程与实战的博客 9888

【C语言】字符串输入的三种方式

本文介绍了C语言中三种字符串输入方式的区别:1) gets()函数直接从输入缓冲区读取字符串并丢弃换行符;2) getchar()逐个字符读取,可处理空格和换行;3) scanf()遇空格结束输入且会残留换行符。重点对比了gets()和scanf()在缓冲区处理上的差异,指出使用scanf()后需用getchar()清除残留换行符。三种方式各有特点,gets()适合带空格的完整字符串输入,getchar()更灵活但代码复杂,scanf()简洁但有输入限制。

Q大帅 19万+

C语言-字符串与字符数组区别

区别: C语言中没有字符串这种数据类型,可以通过char的数组来代替 字符串一定是一个char的数组,但char的数组未必是字符串 数字0(和字符'\0'等价)结尾的char数组就是一个字符串,但如果char数组没有以数字0结尾,那么就不是一个字符串,只是普通字符数组,所以字符串是一种特殊的char数组。 注: %s是打印一个字符串,%c是打印一个字符 %s会接收字符串结束标志'\0...

qq_41481924的博客 2万+

树莓派安装snowboy

1、树莓派换源 参考链接:https://blog.youkuaiyun.com/qq_43556844/article/details/113615915 2、更新pip3 参考链接:https://blog.youkuaiyun.com/qq_43556844/article/details/113616214 3、存取麦克风 我们使用PortAudio作为音频输入/输出的跨平台支持。我们还使用sox作为快速实用程序来检查麦克风设置是否正确。 sudo apt-get install python-pyaudio python

qq_43556844的博客 1923

C语言中 char s[] 和 char* s 的区别

char s[] 和 char* s 的区别1、数组本质2、指针指针的指向3、字符数组对于printf("%s",str); 为什么用首地址就可以输出字符串?4、char * 与 char a[ ]char * s 与 char a[ ] 的本质区别5、char ** 和char *a[]char *a[]char ** s C语言指针可以代替数组使用 1、数组本质 数组是多个元素的集合,在内存中分布在地址连续的单元中,因此可以通过其下标访问数组的不同数组。 例如: 下面展示一些 char s[3] =

qq_43232556的博客 1万+

CST Studio Suite安装详细教程(附安装包)CST Studio Suite 2024超详细安装教程

CST Studio Suite 2024安装指南摘要:本文详细介绍了CST Studio Suite 2024电磁仿真软件的下载与安装流程,包含23个图文步骤说明,从解压安装包到配置许可证服务器。重点提示了以管理员身份运行、自定义安装路径等关键步骤,并提供了常见问题解决方案和入门技巧。该软件适用于天线设计、PCB分析等高频电磁场仿真,安装后需通过localhost:27000连接许可证服务器完成激活。

pythonqiang9的博客 1万+

char *字符串和char[]的区别

char *类型的字符串和char []类型的字符数组在 C 语言中经常用到,它们的主要区别在于如何定义和使用。char *类型的字符串是一个指向字符数组的指针,指针的值为第一个字符的地址,字符串中的每个字符都是用连续的内存单元存储的。

weixin_39888010的博客 6374

Simulink开发项1000例实战专栏--实例161:基于Simulink实现电动汽车电机驱动系统的建模与仿真

通过上述步骤,我们成功实现了基于Simulink的电动汽车电机驱动系统的建模与仿真。该系统能够全面评估电机驱动系统的性能,验证控制策略的有效性,并通过优化设计提高车辆的动力性和效率。引入智能预测:结合人工智能技术,实现更智能的控制策略。扩展功能:增加对多种电机类型的支持,提升系统通用性。实验验证:将仿真模型应用于实际硬件,进行实验验证,评估其在实际工况下的表现。

xiaoheshang_123的博客 189

HANA-公司间销售ICS-IDOC系统配置-保姆级配置文档

合作伙伴编号:这个客户表示收票方(销售公司在生产公司中所对应的客户代码,卖方开票,买方收票),也就是咱们在配置消息类型输出的时候合作伙伴的类型的一个具体的客户编码,这个是站在发货工厂的角度去看的,也就是EDI 输出的 BP 合作伙伴的编号;在项目实施过程中经常会遇到关联方交易的问题,有公司间采购的业务场景,也会存在公司间销售的业务场景,本文将着重讲解公司间销售在SAP系统中的实现场景。在这个过程中,销售公司向客户开票产生应收,而生产公司向销售公司开票产生自己的应收,同时销售公司向生产公司产生应付。

我小时候很黑的博客 2392

C语言:字符数组的结束标志,输入输出,使用字符串处理函数等

文章目录字符串和字符串结束标志字符数组的输入输出用scanf函数输入使用字符串处理函数puts函数——输出字符串的函数gets函数——输入strcat函数——字符串连接符strcpy和strncpy函数——字符串复制函数strcmp函数——字符串比较函数strlen函数——测字符串长度的函数strlwr函数——转换为小写的函数strupr函数——转换为大写的函数注意 字符串和字符串结束标志 在c语...

weixin_44301809的博客 7927

第10章《VTK自定义部件Widget》

是用于交互式操作 3D 场景的组件,例如移动对象、调整尺寸、创建标注等。VTK 提供了一些内置的 Widget,如。,用户可以点击鼠标,在 3D 场景中放置一个点。负责绘制一个点,并控制其颜色、大小等。,可用于 3D 标注、对象拾取等应用!等,但在某些应用中,我们需要。这样,我们就创建了一个。

yumeiguo的博客 523

C 语言中的 char 关键字详解

C 语言中的 char 关键字详解

嘻嘻爱编码的博客 9205

HBase骚操作之数据加载方式BulkLoad

本文研究了一种HBase BulkLoad的入库方式,该方式利用HBase的数据信息按照特定格式存储在hdfs内这一原理,直接在HDFS中生成持久化的HFile数据格式文件,然后上传至合适位置,即完成巨量数据快速入库的办法。该方式配合MapReduce完成,高效便捷,而且不占用Region资源,增添负载,在大数据量写入时能极大的提高写入效率,并降低对Hbase节点的写入压力。HBase BulkLoad对于异构数据源的合并及大量数据一次性导入具有重要指导意义,相比HBase Put操作在性能上具有较高的优势

石榴姐yyds 7789

华为Ascend C算子开发能力认证(中级)(个人记录,有完整代码,已通过认证,仅供参考)

本文介绍了在昇腾NPU环境下实现Sigmoid算子的完整流程。首先需要在华为云ModelArts-Notebook或开发者套件上搭建环境,要求CANN版本为8.0.0.beta1。主要内容包括:1)实现SigmoidCustom算子的kernel侧核函数代码;2)完成host侧Tiling结构体实现;3)支持Float16数据类型。代码实现部分详细展示了核函数计算流程、数据拷贝和牛顿迭代优化方法。最后介绍了编译部署流程,包括环境配置、代码上传、编译执行等步骤,并提供了提交规范说明。该实现通过调用Ascend

qq_73044452的博客 1107

C语言字符串 char* char[] char**与char* []

首先针对一位字符数组即字符串的情况进行说明。 char * s = "hello"; 等价于 char str []= "hello"; 原因是常量字符串在编译器眼里就是它第一个字符的地址。 如图所示,复现的时候需要注意s的值会变,s是一个指针变量,整形,它的值就是字符串第一个字符所在的地址,*s 就是 china中的c,printf函数的原理就是,把s的值即第一个字符的地址传进去,然后...

crazyeden的博客 2万+

HTML音乐爱心3D旋转相册完整源码

HTML音乐爱心3D旋转相册完整源码

LilyCoder的博客 1380

C语言的字符数组和字符串

用来存放字符的数组称为字符数组//一维字符数组 char b [ 5 ] [ 10 ];//二维字符数组 char c [ 20 ] = {// 给部分数组元素赋值 char d [ ] = {//对全体元素赋值时可以省去长度字符数组实际上是一系列字符的集合,也就是字符串(String)。在C语言中,没有专门的字符串变量,没有string类型,通常就用一个字符数组来存放一个字符串。//这种形式更加简洁,实际开发中常用。

AnChenliang_1002的博客 2170

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

c语言字符数组

如果我们的char数组初始化的时候,没有完全初始化值的时候, 使用'\0'进行填充。需要注意的是,我们C语 言中的字符是字节字符。在C语言中,支持常量字符串,不支持变量字符串,如果想要实现类似的变量字符串,C语言提供了 两种实现方式。·B的ASCIIT码是0,不是一个可显示可输出的字符,是“空操作符”,它什么都不做,不会增加有。采用fgets进行字符串输入,可获取所有输入的字符串,包含\n,在实际的字符串处理时,我们。采用gets进行字符串输入,可获取所有输入的字符串,包含\n,在实际的字符串处理时,我。

2503_90800784的博客 1248

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C/C++——字符串和字符数组

<br /><br />    C语言中没有专门的字符串变量,如果要将一个字符串存放在变量中,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。<br /><1> 定义: char c[10] <br /> <br />字符型与整型互相通用,因此 int c[10] 也可以定义字符数组。但由于两种类型分配字节不同, 用整型来定义会浪费空间, 另外这样定义实际意义也不大, 只是为了说明其合法性。<br /><br /><2> 初始化: <br /><br />    最简单

shineHoo的专栏 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C语言中处理字符串输出

在C语言中没有字符串类型(String),也没有字符串变量,字符串是存放在字符型数组中的。 用来存放字符数据的数组叫字符数组。 在字符数组中的一个元素内存放一个字符。 例如: char a[12]; a[0]='I',a[1]=' ',a[2]='a',a[3]='m',a[4]=' ',a[5]='s', a[6]='t',a[7]='u',a[8]='d',a[9]='e',a[10]='n', a[11]='t', 以上定义了a为字符数组,包含11个元素。赋值以后数组的状态如图所示:

weixin_44143600的博客 3844

C语言升级历程——字符串和字符数组

fgets()在读取一个用户通过键盘输入的字符串的时候,同时把用户输入的回车也作为字符串的一部分。通过scanf()和gets()输入一个字符串的时候,不包含结尾的“\n”,但通过fgets()结尾多了“\n”。fputs()是puts()的文件操作版本,但fputs()不会自动输出一个'\n'数字0(和字符 '\0' 等价)结尾的char数组就是一个字符串,gets(str)和scanf("%s",str)的区别。fgets()函数是安全的,不存在缓冲区溢出的问题。成功:成功读取的字符串。

qq_45369194的博客 956

C语言数组之字符数组

​ 从键盘录入一个字符串常量到字符数组,返回字符数组的地址(首地址,默认返回的地址,一般用12位16进制数表示)​ 从键盘录入一个字符串常量到字符数组,返回字符数组的地址(首地址,默认返回的地址,一般用12位16进制数表示)③ 如果提供的字符个数与数组长度相同,可以省略数组长度,系统会自动确定元素个数,适合字符较多时。​ ③ 经过对比,我们发现,在字符串输入中,fgets和scanf相比,fgets友好一些。​ 如果我们的char数组初始化的时候,没有完全初始化值的时候,空出来的地方使用。

2401_88897915的博客 1117

C语言字符数组

C语言字符数组 1.1字符数组的定义和引用 1、字符数组的定义 字符数组的定义与其他数据类型的数组定义类似,一般形式如下: char 数组标识符[常量表达式] 因为要定义的是字符数组,所以在数组标识符钱所用的类型是char,后面括号中表示的是数组元素的数量。 例如,定义一个字符数组 a char a[5]; 其中,a表示数组的标识符,5表示数组总包含5个字符类型的变量元素。 2、字符数组的引用...

Lexi_Alexander的博客 1420

C语言怎么用char输出多个字母,c语言中char类型如何存放多个字符

c语言中char类型如何存放多个字符以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!c语言中char类型如何存放多个字符char只能存放一个字符,你可以定义一个数组来单个存放非要存放多个字符请用字符串如果是要存放单个汉子,请用char a[2]="的"来存放因为一个汉字占2个字节c语言中有没有字符串类型?如何存放和处理字...

weixin_39524439的博客 6068
上一篇: 【数据结构】二叉树
下一篇: 【数据结构】二叉树OJ题目
CatShitK
博客等级 码龄5年 3149粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值