当前位置:网站首页>c语言字符和字符串总结
c语言字符和字符串总结
2022-07-29 14:37:00 【BSP初级小学僧】
在C语言中,“字符”与“字符串”之间,是有区别的。
首先,一个很明显的区别是:
“字符”,使用单引号作为定界符,而“字符串”,是使用双引号作为定界符。
从本质上来说,关键字“char”定义的也是一个整数,这个整数在内存中占据一个字节。与ASCII码表相对应。比如常用的ASCII码表的对应关系是:数字48表示字符'0';数字65表示字符'A';数字97表示字符'a'
在定义一个“字符”的时候,定界符要写成单引号。在屏幕上打印一个字符的时候,需要在printf函数中,使用“%c”这个占位符。
在屏幕上要打印一个字符串的时候,在printf函数中,使用的是“%s”这个占位符。与“字符”的“%c”这个占位符是不同的。
“字符”与“字符串”之间,除了定界符不同之外,还有一个区别是:
“字符”占据一个字节,但是“字符串”是占据多个字节。而且,在“字符串”的结尾处,自动被编译器加上了'\0'这个字符,在ASCII码中,'\0'表示的是一个空字符。
如果在定义一个字符串常量的时候,使用了单引号,程序就会报错。在定义字符串的时候,需要在变量名后面加上“中括号”,类似于定义“数组”时候的格式。
字符:
在计算机中是以整型形式存储的,当需要显示时会根据ASCII表中的对应关系显示出相应的符号或图案。单个字符表示一定是以单引号括起来。
%c %d
'\0' 表示空字符0
'0' 数字0,表示48
'A' 65
'a' 97
字符的输入:
scanf("%c",&ch);
ch = getchar();
字符的输出:
printf("%c",ch);
putchar(ch);
字符串:
有字符组成的船型结构,结束标志是 '\0'
字符串的输入:
scanf("%s",地址);
缺点:不能输入空格
字符串的输出:
printf("%s",地址)
int puts(const char *s);
功能:输出一个字符串,会在末尾自动添加一个\n
返回值:成功输出的字符个数
存在形式
1、字符数组:
char str[10] = {'a','b','c',...};
特点:由 char 类型组成的数组,要为'\0'预留位置,初始化麻烦
优点:是用的是栈内存,数据可以随意修改
2、字符串字面值:(字符串常量)
由双引号办函的若干个字符就称作字符串
优点:在末尾隐藏一个'\0'
字符串的字面值是以地址形式存在的,数据存储在代码段中,如果修改就会引起段错误
注意:他的结束标志是加在末尾的
printf("%d\n",sizeof("123123"));
注意:字符个数+1
printf("%d\n",sizeof(p));
注意:指针字节数4|8
多个一模一样的字符串字面值带代码段中只有一份
3、常用方式:
字符数组[] = "字符串字面值"
用字符串字面值给字符数组赋值
优点:
1)会自动给'\0'预留位置
2)赋值完成后,字符串会存在两份,一份在代码段,另一份在栈内存(可以修改)
单个字符的获取和打印
//单个字符的获取和打印
char ch;
ch=getchar();//获取字符
putchar(ch);//打印字符 带回显功能,输入一个字符就直接显示,然后结束
ch=getche();//获取字符
printf("\n");//带回显功能,输入一个字符就直接显示,然后结束
putchar(ch);//打印字符不回显,但是已经赋值
ch=getche();
scanf 可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界
scanf("%s",str);//可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界char str[5];
scanf("%s",str);//可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界
printf("%s",str);//指针越界,但是地址还是连续的 gets 可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界
gets(str);//可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界
printf("%s",str);//正常打印fgets
fgets(str,6,stdin);
printf("%s",str);总体代码如下:
#include <stdio.h>
int main()
{
//test01();
test02();
return 0;
}
void test01(void)
{
//单个字符的获取和打印
char ch;
ch=getchar();//获取字符
putchar(ch);//打印字符
ch=getche();//获取字符
printf("\n");//带回显功能,输入一个字符就直接显示,然后结束
putchar(ch);//打印字符
ch=getche();//不回显,但是已经赋值
}
void test02(void)
{
char str[5];
scanf("%s",str);//可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界
printf("%s",str);//指针越界,但是地址还是连续的
scanf("%5s",str);//限制只获取5个字符长度
//getchar();//拿走一个字符
printf("%s",str);//正常打印
gets(str);//可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界
printf("%s",str);//正常打印
gets(str);//可以无限获取字符串内容,并正常打印输入的所有字符,但是指针已经越界
printf("%s",str);
fgets(str,6,stdin);
printf("%s",str);
}边栏推荐
- 基于C语言仿真实现的粒子火焰系统
- <老式喜剧>
- Work Efficiency - Fifteen minutes allows you to quickly learn Markdown syntax to proficient in typesetting practice notes
- 力扣每日一题-第45天-682. 棒球比赛
- Shared memory - shmget filling holes
- Map遍历 key-value 的4种方法
- 力扣之顺序表
- Guangzhou Emergency Management Bureau released the top ten safety risks of hazardous chemicals in summer
- 论人生自动化
- Google Play 政策更新 | 2022 年 7 月
猜你喜欢

疫情之下的裁员浪潮,7点建议帮你斩获心仪offer

部门例会上做测试分享,不知道分享什么内容?

APP为什么用JSON协议与服务端交互:序列化相关知识

Nacos基础教程

arcgis中编码方式改变引起的shp文件乱码、字符截断问题处理

Programmers are a group with a high incidence of occupational diseases. Don’t be naive to think that it’s just as simple as being bald.

我裁完兄弟们后,辞职了,转行做了一名小职员

【ArcGIS微课1000例】0030:ArcGIS利用MXD doctor工具分析并修复mxd地图文档

基于Flink CDC打通数据实时入湖

工业设备数字孪生技术,解决方案系统平台案例
随机推荐
回放线上流量利器-GoReplay
【LeetCode】350. 两个数组的交集 II
企业级存储详解与存储资源盘活
如何在MySQL中执行SQL?
光鲜亮丽的业绩,也掩盖不了科大讯飞的“一身病痛”
换掉 UUID,更快、更安全!
ArcGIS Pro与ArcGis区别
593. 有效的正方形 : 简单几何运用题
Map遍历 key-value 的4种方法
【IIC通信】Chap.2 (I2C)IIC协议的特点;为什么IIC需要开漏输出、上拉电阻?
带你搞懂 Redis 中的两个策略
广州市应急管理局发布夏季危化品十大安全风险
《外太空的莫扎特》
一篇适合新手的深度学习综述!
Domestic mobile phones turn users into their advertising broilers, no wonder consumers are buying iPhones
即刻体验 | 借助 CTS-D 进一步提升应用设备兼容性
【LeetCode】217. 存在重复元素
Why do strings use the final keyword
AC自动机笔记与例题整理
Interfaces and Abstractions