当前位置:网站首页>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);
}边栏推荐
猜你喜欢

Google Cloud X Kyligence|如何从业务视角管理数据湖?

ST表(动态规划倍增思路离线维护区间极值问题)

Violence recursion to dynamic programming 02 (very clever game of CARDS)

Linux installation of MySQL (super detailed)

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

Chinese Internet technology companies were besieged by wolves. Google finally suffered a severe setback and its profits fell sharply. It regretted promoting the development of Hongmeng...

Google Play 政策更新 | 2022 年 7 月

LeetCode·739.每日温度·递减栈

Instant Messaging - New Software that Changes Social and Work Status

ArcGIS Molder Builder模型构建器基本知识
随机推荐
【LeetCode】217. 存在重复元素
嵌入式开发经验分享,把学习当作一种兴趣
Guangzhou Emergency Management Bureau released the top ten safety risks of hazardous chemicals in summer
基于C语言实现的LL(1)分析
AOP implementation enterprise API access interface monitoring (via Google Guava cache data)
云原生Meetup·广州站举行,共话云原生时代的企业数字化转型
如何使用SparkSQL做一些简单的数据分析和可视化展示?
RAMAN 中 OPTIMIZATION 优化选项的作用
Why does APP use the JSON protocol to interact with the server: serialization related knowledge
Couldn‘t create temporary file /tmp/apt.conf.uko4Kd for passing config to apt-key
【IIC通信】Chap.1(I2C)IIC通信原理、IIC读写时序详解
【C语言】AI三子棋的成长之路
建议尽快优化搜索体验
即时通讯-改变社交与工作状态的新型软件
About inner classes
第4章_2——视图的使用
53 LeetCode 】 【. Most architectural array and
交叉编译工具链的安装和配置过程
数据库mysql的执行顺序(sql语句大全实例教程)
arcgis中编码方式改变引起的shp文件乱码、字符截断问题处理