首先强调一点,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语言输入字符串的更多相关文章

  1. C 语言 输入字符串 并计算输入的字符的长度

    int main(void) { char a[50];int i=0;char *j;gets(a);//输入字符串j=a;while(*j!='\0'){j++;//指针指向下一个数组字符i++; ...

  2. 【转】C语言中字符串输入的三种方法

    在网上看到,讲的还算详细,转过来学习一下...... ======================================================================= 使 ...

  3. C语言风格字符串的概念、定义、输入字符串、输出字符串

    字符串: C语言中最有用.最重要的数据类型之一. 字符串:是以\0字符结尾的char类型数组.所以可以把数组和指针知识应用于字符串. 如何在程序定义字符串: 1.字符串字面量 用双引号括起来的内容称为 ...

  4. C语言之字符串处理函数

    C语言中字符串处理函数介绍 下面介绍8种基本的常用的字符串处理函数,在数值数组中也常常用到(部分函数).所有的C语言编译系统中一般都提供这些函数. 1.puts函数——输出字符串的函数 一般的形式为p ...

  5. C语言学习 —— 字符串的学习(一)

    这是本人在学习 C语言有关 字符串内容 时的相关笔记 由于本人技术有限,如有错误,还望指正 C语言中数据类型中只有 字符型(char),而 char型 变量一次只能存储一个字符,在日常工作中经常需要定 ...

  6. c语言输入输出函数

    上学年学习c语言的时候比较匆忙,没好好吸收. 现在有时间好好复习下. 本文就c语言常见输入函数进行简单介绍,对比. ps:由于自己能力有限,时间有限,多数介绍,总结都是摘录网上相关学习资料,下面给出本 ...

  7. Go语言中字符串的查找方法小结

    这篇文章主要介绍了Go语言中字符串的查找方法小结,示例的main函数都是导入strings包然后使用其中的方法,需要的朋友可以参考下   1.func Contains(s, substr strin ...

  8. C语言常用字符串函数总结

    ANSI C中有20多个用于处理字符串的函数: 注意:const 形参使用了const限定符,表示该函数不会改变传入的字符串.因为源字符串是不能更改的. strlen函数: 函数原型:unsigned ...

  9. C 语言实例 - 字符串排序

    C 语言实例 - 字符串排序 C 语言实例 C 语言实例 按字典顺序排序. 实例 #include<stdio.h> #include <string.h> int main( ...

随机推荐

  1. GoLang 自学系列(二)—— defer

    defer 关键字 首先来看官网的定义: A "defer" statement invokes a function whose execution is deferred to ...

  2. Alpha冲刺-第二次冲刺笔记

    Alpha冲刺-冲刺笔记 这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzzcxy/2018SE2 这个作业要求在哪里 https://edu.cnblogs. ...

  3. 「懒惰的美德」我用 python 写了个自动生成给文档生成索引的脚本

    我用 python 写了一个自动生成索引的脚本 简介:为了刷算法题,建了一个 GitHub仓库:PiperLiu / ACMOI_Journey,记录自己的刷题轨迹,并总结一下方法.心得.想到一个需求 ...

  4. [Windows] Prism 8.0 入门(上):Prism.Core

    1. Prism 简介 Prism 是一个用于构建松耦合.可维护和可测试的 XAML 应用的框架,它支持所有还活着的基于 XAML 的平台,包括 WPF.Xamarin Forms.WinUI 和 U ...

  5. 第6.5节 exec函数:一个自说自话的强大Python动态编译器

    在Python动态执行的函数中,exec是用于执行一个字符串内包含的Python源码或其编译后对应的字节码. 一.    语法 1.    exec(Code, globals=None, local ...

  6. 第8.16节 Python重写自定义类的__str__方法

    一. 引言 上节结合案例介绍了重写__repr__方法的关注点,重写__repr__方法的要点是要准确的输出开发人员关注的信息,并便于开发人员使用相关信息.而__str__方法是为最终用户返回类的相关 ...

  7. PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法

    对于Model/View中视图的数据编辑后怎么能实时获取编辑的数据变动位置和变动情况查阅了一些资料,终于基本弄明白必须重写Model的setData方法才能截获.setData方法是视图中各种角色数据 ...

  8. ftp之filezilla使用记录

    1.550 can't access file错误 我们在客户端查看文件时,有些文件被另外的程序占用了,就会出现这个错误.比如,log日志文件.解决办法:在server端,找到settings设置,找 ...

  9. 数据结构与算法——图(游戏中的自动寻路-A*算法)

    在复杂的 3D 游戏环境中如何能使非玩家控制角色准确实现自动寻路功能成为了 3D 游戏开 发技术中一大研究热点.其中 A*算法得到了大量的运用,A*算法较之传统的路径规划算法,实时性更高.灵活性更强, ...

  10. jmeter__问题记录,中文乱码问题(json参数化)

    这种情况在jmeter3.0的版本中才会产生,注意:这不是乱码,而是由于3.0中优化body data后,使用默认的字体(Consolas)不支持汉字的显示.这样的情况可以这样调整:进入jmeter. ...