首先强调一点,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. windows中flask的环境搭建

    之前在ctf中遇到了python模板注入的题,于是就打算学习一下flask框架,它是基于Python的Web轻量级应用框架,与其他框架相比,Flask可以自主选择应用组件,可扩展性强. 安装也简单 第 ...

  2. Docker中搭建FastDFS文件系统(多图)

    关于FastDFS FastDFS 是以 C 语言开发的一项开源轻量级分布式文件系统,他对文件进行管理,主要功能有:文件存储,文件同步,文件访问(文件上传/下载)等,特别适合以文件为载体的在线服务,如 ...

  3. 使用react终端运行npm start时报错

    npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! my-app@0.1.0 start: `react-scripts start` npm ERR ...

  4. moviepy音视频剪辑:AudioClip的max_volume方法报TypeError: bad operand type for abs(): ‘list‘错

    ☞ ░ 前往老猿Python博文目录 ░ 一.环境 操作系统:win7 64位 moviepy:1.0.3 numpy:1.19.0 Python:3.7.2 二.应用代码及报错信息 应用代码 imp ...

  5. (数据科学学习手札99)掌握pandas中的时序数据分组运算

    本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在使用pandas分析处理时间序列数据 ...

  6. ORACLE PRAGMA AUTONOMOUS_TRANSACTION 自治事务 单独提交某一段操作

    个人使用示例: CREATE OR REPLACE PROCEDURE logs(p_remark VARCHAR2, p_log CLOB) AS PRAGMA AUTONOMOUS_TRANSAC ...

  7. ajax的五种状态

    ajax的五种状态(readyState ) 0 - (未初始化)还没有调用send()方法 1 - (载入)已调用send()方法,正在发送请求 2 - (载入完成)send()方法执行完成,已经接 ...

  8. 如何建一个SAM

    部分改编自OI WIKI 先从一个简单的问题入手: 给定一个串,构造一个图,使其能够表示它的所有子串. 显然一个子串就是一个后缀的前缀.所以一个很显然的方式就是把所有后缀扔进trie里. 比如当前串是 ...

  9. sql server的bcp指令

    有时需要允许bcp指令 -- 允许配置高级选项EXEC sp_configure 'show advanced options', 1GO-- 重新配置RECONFIGUREGO-- 启用xp_cmd ...

  10. 【jenkins】构建工作集

    构建工作集,参数化工作任务 1.New Item 2.配置新的工作任务 3.关联测试用例的远程仓库 4.添加任务构建后,触发发送报告信息 5.新建单个测试套件 6.添加触发轮询任务 7.关联测试集 8 ...