C语言输入字符串
首先强调一点,C语言没有字符串的概念!所谓的字符串实际上还是以数组形式保存的。
方法1 —— 通过"%s"输入
优点:简单明了,输入字符只要不大于数组长度都可以。
#include <stdio.h>
int main() {
char s[100]="\0";//数组初始化
scanf("%s",s);
for(int i=0;i<100;i++){//打印输入的一串字符
printf("%c",s[i]);
}
}
输入:asdfasdfasd12341234
输出:asdfasdfasd12341234
方法2 —— 通过for循环输入
缺点:输入的数长度固定,并且空格和换行符都会被判定为输入字符。
#include <stdio.h>
int main() {
char s[100]="\0";//初始化
for(int j=0;j<10;j++){//定义输入10个字符
scanf("%c",&s[j]);//逐个获取输入字符(包括空格和换行符)
}
for(int i=0;i<100;i++){//打印输入
printf("%c",s[i]);
}
}
输入:asd 123 hjk
输出:asd 123 hj
方法3 —— 通过gets()输入
使用gets()应注意: gets() 函数从标准输入读入 一行文本,直到读到 新行符 或 EOF 字符 之前,不会停止读入文本。也就是:gets() 不检查边界。因此,当变量空间 小于 一行字符串 时, 使用 gets() 会造成 溢出,程序出错。
#include <stdio.h>
int main() {
char s[100]="\0"; //初始化
gets(s); //获取输入
for(int i=0;i<100;i++){ //打印输入
printf("%c",s[i]);
}
}
运行结果:会提示 warning: this program uses gets(), which is unsafe.

原因就是:gets() 函数从标准输入读入 一行文本,直到读到 新行符 或 EOF 字符 之前,不会停止读入文本。也就是:gets() 不检查边界。因此,当变量空间 小于 一行字符串 时, 使用 gets() 会造成 溢出,程序出错。
那么什么时候会出错呢?看下面这种情况
#include <stdio.h>
int main() {
int n=0;
char s[100]="\0";
scanf("%d",&n); //获取 n 的值
gets(s); //获取 s 字符数组
printf("%d\n",n); //打印 n 的值
for(int i=0;i<100;i++){ //打印 s 字符数组
printf("%c",s[i]);
}
}
运行结果:

为什么 gets()没有被执行呢?
原因是在 gets() 之前有 scanf() ,当输入5之后敲了回车(enter)然而回车并没有没有被n接收让gets()给接收了,gets()接收回车之后就结束输入了。
所以gets()并不是没有执行而是接收了回车,解决办法如下。
#include <stdio.h>
int main() {
int n=0;
char s[100]="\0";
scanf("%d",&n); //获取 n 的值
getchar(); //接收回车符
gets(s); //获取 s 字符数组
printf("%d\n",n); //打印 n 的值
for(int i=0;i<100;i++){ //打印 s 字符数组
printf("%c",s[i]);
}
}
在 scanf() 和 gets() 之间插入 getchar() 用于接收 回车符。
C语言输入字符串的更多相关文章
- C 语言 输入字符串 并计算输入的字符的长度
int main(void) { char a[50];int i=0;char *j;gets(a);//输入字符串j=a;while(*j!='\0'){j++;//指针指向下一个数组字符i++; ...
- 【转】C语言中字符串输入的三种方法
在网上看到,讲的还算详细,转过来学习一下...... ======================================================================= 使 ...
- C语言风格字符串的概念、定义、输入字符串、输出字符串
字符串: C语言中最有用.最重要的数据类型之一. 字符串:是以\0字符结尾的char类型数组.所以可以把数组和指针知识应用于字符串. 如何在程序定义字符串: 1.字符串字面量 用双引号括起来的内容称为 ...
- C语言之字符串处理函数
C语言中字符串处理函数介绍 下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数).所有的C语言编译系统中一般都提供这些函数. 1.puts函数——输出字符串的函数 一般的形式为p ...
- C语言学习 —— 字符串的学习(一)
这是本人在学习 C语言有关 字符串内容 时的相关笔记 由于本人技术有限,如有错误,还望指正 C语言中数据类型中只有 字符型(char),而 char型 变量一次只能存储一个字符,在日常工作中经常需要定 ...
- c语言输入输出函数
上学年学习c语言的时候比较匆忙,没好好吸收. 现在有时间好好复习下. 本文就c语言常见输入函数进行简单介绍,对比. ps:由于自己能力有限,时间有限,多数介绍,总结都是摘录网上相关学习资料,下面给出本 ...
- Go语言中字符串的查找方法小结
这篇文章主要介绍了Go语言中字符串的查找方法小结,示例的main函数都是导入strings包然后使用其中的方法,需要的朋友可以参考下 1.func Contains(s, substr strin ...
- C语言常用字符串函数总结
ANSI C中有20多个用于处理字符串的函数: 注意:const 形参使用了const限定符,表示该函数不会改变传入的字符串.因为源字符串是不能更改的. strlen函数: 函数原型:unsigned ...
- C 语言实例 - 字符串排序
C 语言实例 - 字符串排序 C 语言实例 C 语言实例 按字典顺序排序. 实例 #include<stdio.h> #include <string.h> int main( ...
随机推荐
- 冲刺随笔——Day_Three
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺 作业正文 正文 其他参考文献 无 ...
- IdentityServer4系列 | 资源密码凭证模式
一.前言 从上一篇关于客户端凭证模式中,我们通过创建一个认证授权访问服务,定义一个API和要访问它的客户端,客户端通过IdentityServer上请求访问令牌,并使用它来控制访问API.其中,我们也 ...
- python核心高级学习总结5--------python实现线程
在代码实现上,线程的实现与进程的实现很类似,创建对象的格式都差不多,然后执行的时候都是用到start()方法,与进程的区别是进程是资源分配和调度的基本单位,而线程是CPU调度和分派的基本单位.其中多线 ...
- 《MySQL慢查询优化》之SQL语句及索引优化
1.慢查询优化方式 服务器硬件升级优化 Mysql服务器软件优化 数据库表结构优化 SQL语句及索引优化 本文重点关注于SQL语句及索引优化,关于其他优化方式以及索引原理等,请关注本人<MySQ ...
- 第7.28节 《Python类、类型、协议》章节总结
本章详细介绍了Python协议.多态与"鸭子类型".类.类实例变量.类变量.实例方法.类方法.静态方法.类继承.抽象类.property函数和@property装饰器定义属性访问方 ...
- PyQt学习随笔:Model/View架构中的Delegate(委托)
不同于MVC模式,Model/View设计并不包含用于处理与用户交互的完全独立的部件, 没有将用户交互部分完全分离.一般地,视图负责把模型数据显示给用户,以及处理用户的输入.但是,对于某些特殊要求(比 ...
- js2py 的用法
python调用js的方法 js2py的简单用法 import js2py js = """ function add(a, b) { return a + b } &q ...
- pytorch实战(一)hw1——李宏毅老师作业1
任务描述:利用前9小时数据,预测第10小时的pm2.5的数值,回归任务 kaggle地址:https://www.kaggle.com/c/ml2020spring-hw1 训练集为: 12个月*20 ...
- cookie的理解
第一:每个特定的域名下最多生成20个cookie IE6或更低版本最多20个cookie IE7和之后的版本最多可以有50个cookie Firefox最多50个cookie chrome和Safar ...
- SP7022 CPATTERN - Cow Patterns
本篇题解用于作者本人加深理解,也欢迎大家阅读. 这道题的正解是\(KMP\)加上树状数组,记录每一个位置前几个位置比其小的.相等的.大的数的数量,比较方式便是比较相应的数量,若相等,则匹配成功. 但是 ...