当前位置:网站首页>字符串的小知识
字符串的小知识
2022-08-02 14:02:00 【iccoke】
前言
我们从键盘输入一个字符串是,可以用scanf,也可以使用getchar函数,但是当我们将一个字符串放入一个数组中时,就会出现两种形式
例如字符串" hello"
char crr[]={'h','e','l','l','o'};
char brr="hello"第一种形式肉眼可见的繁琐,当字符数组规模较大时,第二种方法的优势便可以显现出来。
这两者在内存的存储中存储的形式是一样的
但是在一维数组的代码中,我们一般都会涉及到数组长度的应用
我们一般有这两种形式
1.sizeof(crr)/sizeof(crr[0])
这个的使用前提是必须和数组的定义在同一个作用域。
2.使用strlen函数
前提是要引用#include<string.h>头文件并且当遇到\0后就会停止,我们在下面的列子中详细说明。
int main() {
char crr[] = { 'h','e','l','l','o' };
char brr[] = "hello";
int len1 = sizeof(crr) / sizeof(crr[0]);
int len2 = sizeof(brr) / sizeof(brr[0]);
int len3 = strlen(crr);
int len4 = strlen(brr);
printf(" %-5d%-5d%-5d%-5d", len1, len2, len3, len4);
}我们预测将会输出4个5,其中%-5d表示给输出值五个字格,负号代表向左对齐
我们运行程序

我们可以看到得到的结果是5 6 23 5
int len1 = sizeof(crr) / sizeof(crr[0]);
int len2 = sizeof(brr) / sizeof(brr[0]);
我们知道,字符串在存入内存中时,实则后面会有一个\0存在,肉眼不可见,但是在计算中就会出现问题。
int len3 = strlen(crr);
strlen函数对于char crr[] = { 'h','e','l','l','o' }这类的定义得到的值其实是完全随机的,之前提到strlen函数遇到\0结束,但是这个定义中没有\0,因此会出现如上问题
int len4 = strlen(brr);
因此我们在使用sizeof和strlen计算字符数组的长度时,就应该注意,选用合适的方法来计算。
还有一些特殊的字符串数组,例如
int main() {
char crr[] = "\'abc\b\123\07\"\tt\n";
printf("%-5d%-5d", sizeof(crr) / sizeof(crr[0]), strlen(crr));
}这种看起来很复杂的字符串该如何计算,这里我们就要引入一个概念--转义字符。

这是常见的转义字符,根据这个我们可以预测结果应该为12 11
运行结果

边栏推荐
猜你喜欢

MarkDown语法汇总
![[ROS] (05) ROS Communication - Node, Nodes & Master](/img/f5/c541259b69a0db3dc15a61e87f0415.png)
[ROS] (05) ROS Communication - Node, Nodes & Master

Visual Studio配置OpenCV之后,提示:#include<opencv2/opencv.hpp>无法打开源文件

初识c语言指针

Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin [id ‘c

第十单元 前后连调

Flask项目的完整创建 七牛云与容联云

MobileNet ShuffleNet & yolov5 replace backbone

How does Apache, the world's largest open source foundation, work?

paddleocr window10初体验
随机推荐
8581 线性链表逆置
第四单元 路由层
How to solve mysql service cannot start 1069
yolov5,yolov4,yolov3乱七八糟的
跑yolov5又出啥问题了(1)p,r,map全部为0
MySQL数据库语法格式
Basic operations of 8583 sequential stack
Linux:CentOS 7 安装MySQL5.7
第十三单元 混入视图基类
Flask-RESTful请求响应与SQLAlchemy基础
window10 lower semi-automatic labeling
初识c语言指针
瑞吉外卖笔记——第05讲Redis入门
Haystack的介绍和使用
[ROS] (04) Detailed explanation of package.xml
jwt(json web token)
海明校验码纠错设计原理
Flask框架深入一
drf视图组件
【VCU】详解S19文件(S-record)