c语言编程学习之字符串
字符串字面量与字符变量
1.字符串字面量
字符串字面量是一对双引号括起来的字符序列。当c语言编译器在程序中遇到长度为n的字符串字面量时,它会为字符串字面量分配长度为n+1的内存空间。这块内存空间用来存储字符串字面量中的字符,末尾再存储一个额外字符(空字符)。空字符是一个所有位都为0的字节,用转义字符\0表示。它标志了字符串的结束。
我们知道printf函数的参数接受char*类型的值作为它的第一个参数。
对于printf("abc");
,我们传给它一个指针,这个指针为"abc"字面量所在地址的首地址。也就是说,我们传进去的不是这个字面量,而仅仅是一个指针而已。
对于字符串字面量char *s = "abc"
来说,我们可以用*(s+偏移量)
的方式访问其中字符。也可用数组下标的方式访问,如s[偏移量]
。
而试图改变字符串字面量的行为是错误的,如*s = "ab"
是错误的。
注意:不要再需要字符串的时候使用字符(反之亦然)!
如函数调用printf("a");
是合法的,但函数调用printf('a');
是非法的。
这是因为printf函数期望指针作为它的第一个参数,前者为字符串字面量"a"的指针,后者为字符常量'a'。
字符串字面量"a"是用指针来表示的,这个指针指向存放"a"的内存单元。字符常量'a'是用整数(字符集的ASCII码)表示的。
2.字符串变量
常用声明方式:
#define STR_LEN 80
char str[STR_LEN+1];
当声明用于存放字符串的字符数组时,要始终保证数组的长度比字符串的长度多一个字符。这是因为C语言规定每个字符串都要以空字符结尾。
有两种用键盘获取一行字符串的方式:
① gets(str);
这种方式默认输入流是stdin,也就是默认键盘输入。它会直接读入一行,并舍弃掉换行符,然后在字符串最后放入'\0'。但使用它是有风险的,因为读入的一行的字符数量可能会超过str字符数组能存储量的最大值,这样就会发生越界。
② fgets(str,sizeof(str),stdio);
这个函数读入一行,但会把末尾的换行符也读入数组中。使用它是安全的,因为我们传入了str字符数组的大小,它根据字符数组大小来读入字符,若已读取了sizeof(str)-1个字符,就不往下接着读入字符了,然后在字符串末尾放入'\0'。
代码
#include <stdio.h>
int main(){
char a[30];
gets(a);
// fgets(a, sizeof(a), stdin); //最后的换行符也会被读入
printf("%s\n", a);
return 0;
}
输入
Hello handsome guy !
运行
Hello handsome guy !
代码
#include <stdio.h>
int main(){
char a[30];
// gets(a);
fgets(a, sizeof(a), stdin); //最后的换行符也会被读入
printf("%s\n", a);
return 0;
}
输入
Hello handsome guy !
运行
Hello handsome guy !
c语言编程学习之字符串的更多相关文章
- Linux C语言编程学习笔记 (1)进程控制入门
想进行Linux系统开发已经很久了,一直没有付诸实践.今日终于开始学习Linux下的C语言编程,研究一天,终于大概弄明白了Linux系统进程管理的一些基本概念和编程方法,总结下来以方便大家学习和自己实 ...
- linux下的c语言编程学习笔记
视频参看csdn学院王阳和下面的linux环境下c语言编程基础相当的经典,其中王阳的视频讲的很好,相当的经典 编译hellogcc.c需要依赖/home目录下的头文件 为了避免同一个文件被includ ...
- 适合刚刚学习编程的萌新:C语言编程学习制作超简单又好玩的报数游戏!
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- 【C语言编程学习笔记】利用462字节代码实现雅虎logo ACSII 动画!
ACSII 动画演示: 不过本文介绍的是另一个作品:c 代码实现雅虎 logo ACSII 动图. 运行后,你将会看到: 它是一个 20fps.抗锯齿的 Yahoo! logo ASCII 动 ...
- 转:Python语言编程学习资料(电子书+视频教程)下载汇总
开发工具: Python语言集成开发环境 Wingware WingIDE Professional v3.2.12 Python语言集成开发环境 Wingware WingIDE Professio ...
- C语言编程学习不难学,是你没找对方法!
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- C语言编程学习:使用函数必须知道的3点注意事项
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- C语言编程学习开发的俄罗斯方块小游戏
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- C语言编程学习打造——做题游戏
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
随机推荐
- LinkedList类详解
LinkedList类中的方法与实现原理 目录 一.数据结构 二.类标题 三.字段 四.构造函数 五.方法分析 5.1 共有方法 public boolean add(Object o) public ...
- 服务器安装部署-01-MySQL
1 MySQL 1.1 安装 在root用户权限下 # 创建mysql用户和用户组,同时禁止登陆 shell> groupadd mysql shell> useradd -r -g my ...
- javascript 取自己
var own=docment.currentScript;
- Java单例模式实现,一次性学完整,面试加分项
单例模式是设计模式中使用最为普遍的一种模式.属于对象创建模式,它可以确保系统中一个类只产生一个实例.这样的行为能带来两大好处: 对于频繁使用的对象,可以省略创建对象所花费的时间,这对于那些重量级对象而 ...
- [递推] A. 【例题1】错排问题
A. [例题1]错排问题 题目描述 求多少个 n n n个数的排列 A A A ,满足对于任意的 i ( 1 ≤ i ≤ n ) i(1 ≤ i ≤ n) i(1≤i≤n) 使 A i ≠ i Ai ...
- JS基础学习第四天
对象(Object) 对象是JS中的引用数据类型对象是一种复合数据类型,在对象中可以保存多个不同数据类型的属性使用typeof检查一个对象时,会返回object 对象的分类: 1.内建对象- 由ES标 ...
- 看过这篇剖析,你还不懂 Go sync.Map 吗?
hi, 大家好,我是 haohongfan. 本篇文章会从使用方式和原码角度剖析 sync.Map.不过不管是日常开发还是开源项目中,好像 sync.Map 并没有得到很好的利用,大家还是习惯使用 M ...
- RocketMq(一)初识
消息中间件基本上是互联网公司必用的一个中间件,为什么要使用MQ,当然是因为能给我们的系统带来很多好处. 消息队列简单来说是一种先进先出的数据结构,先简单认识下. 一.应用场景 消息中间件主要应用场景主 ...
- 分页系列之一:SQL Server 分页存储过程
以下为最基本的代码结构,SQL Server 2012 开始支持 CREATE PROCEDURE procXXX @Page int, --当前页码,从1开始 @PageSize int --每页记 ...
- mysql is null 和 =null 区别
数据库中 null 表示 不可知,不确定所以 判断都用 字段 is null的方式进行判断而 = null .<> null 的判断结果,仍然是不可知,不确定,所以 不会返回任何结果.或者 ...