字符串字面量与字符变量

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语言编程学习之字符串的更多相关文章

  1. Linux C语言编程学习笔记 (1)进程控制入门

    想进行Linux系统开发已经很久了,一直没有付诸实践.今日终于开始学习Linux下的C语言编程,研究一天,终于大概弄明白了Linux系统进程管理的一些基本概念和编程方法,总结下来以方便大家学习和自己实 ...

  2. linux下的c语言编程学习笔记

    视频参看csdn学院王阳和下面的linux环境下c语言编程基础相当的经典,其中王阳的视频讲的很好,相当的经典 编译hellogcc.c需要依赖/home目录下的头文件 为了避免同一个文件被includ ...

  3. 适合刚刚学习编程的萌新:C语言编程学习制作超简单又好玩的报数游戏!

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  4. 【C语言编程学习笔记】利用462字节代码实现雅虎logo ACSII 动画!

    ACSII 动画演示:   不过本文介绍的是另一个作品:c 代码实现雅虎 logo ACSII 动图. 运行后,你将会看到:   它是一个 20fps.抗锯齿的 Yahoo! logo ASCII 动 ...

  5. 转:Python语言编程学习资料(电子书+视频教程)下载汇总

    开发工具: Python语言集成开发环境 Wingware WingIDE Professional v3.2.12 Python语言集成开发环境 Wingware WingIDE Professio ...

  6. C语言编程学习不难学,是你没找对方法!

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  7. C语言编程学习:使用函数必须知道的3点注意事项

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  8. C语言编程学习开发的俄罗斯方块小游戏

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  9. C语言编程学习打造——做题游戏

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

随机推荐

  1. python中对类的方法中参数self的理解

    我们通过下面的代码来对参数self进行理解 #coding:utf-8 2 class washer(): 3 def wash(self): 4 print("洗衣服") 5 p ...

  2. Java进阶专题(二十八) Service Mesh初体验

    前言 ​ ⽬前,微服务的架构⽅式在企业中得到了极⼤的发展,主要原因是其解决了传统的单体架构中存在的问题.当单体架构拆分成微服务架构就可以⾼枕⽆忧了吗? 显然不是的.微服务架构体系中同样也存在很多的挑战 ...

  3. Kubernetes声明式API与编程范式

    声明式API vs 命令时API 计算机系统是分层的,也就是下层做一些支持的工作,暴露接口给上层用.注意:语言的本质是一种接口. 计算机的最下层是CPU指令,其本质就是用"变量定义+顺序执行 ...

  4. [图论]剑鱼行动:kruskal

    剑鱼行动 目录 剑鱼行动 Description Input Output Sample Input Sample Output 解析 难点 代码 Description 给出N个点的坐标,对它们建立 ...

  5. Linux实战技能,教你轻松应对85%的使用场景

    在Linux实操的过程中,你在网上也能搜到一堆参考资料,但是看完之后还是会觉得似懂非懂,无法举一反三,从网上复制粘贴了事,则极有可能不起作用. 如果侥幸解决了特定的问题,也意识到自己需要系统学习一下 ...

  6. windows2003安装php ,mysql,fastgui

    在上一章中,windows2003的iis搭建已经完成,但是我们现在用的多的也包含php,该如何让Windows2003成功使用php文件呢? windows2003需要先行安装vc9运行库才能与fa ...

  7. Debian10 安装MyCLI

    1 概述 Debian10安装MyCLI. 环境: Debian10 Python3.7 2 准备环境 2.1 Python 首先确保安装了Python: apt install python3 若是 ...

  8. 基本dos命令

    Dos命令 打开cmd方法 开始---windows系统---命令提示符 win键 + R键 输入cmd --- 回车 按住Shift键---右击任意文件夹-----单击在此处打开PowerShell ...

  9. Spring Cloud Alibaba(6)---Nacos持久化Mysql8.0版本

    Nacos持久化Mysql8.0版本 有关Nacos之前写过三篇文章. Spring Cloud Alibaba(3)---Nacos概述 Spring Cloud Alibaba(4)---Naco ...

  10. 前后端分离中的无痛刷新token机制

    今天我们来说一说前后端分离中的无痛刷新token机制 博主先来分享一波福利,最近挖到的宝藏,刚开始学Java的同学看 https://www.bilibili.com/video/BV1Rx41187 ...