当前位置:网站首页>字符串的小知识
字符串的小知识
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
运行结果

边栏推荐
猜你喜欢
随机推荐
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第十三章)
Unit 4 Routing Layer
(ROS) (03) CMakeLists. TXT, rounding
猜数字游戏,猜错10次关机(srand、rand、time)随机数生成三板斧(详细讲解!不懂问我!)
What's wrong with running yolov5 (1) p, r, map are all 0
Implementation of redis distributed lock and watchdog
第十单元 前后连调
【VCU】详解S19文件(S-record)
重新学习编程day1 【初始c语言】【c语言编写出计算两个数之和的代码】
Visual Studio配置OpenCV之后,提示:#include<opencv2/opencv.hpp>无法打开源文件
8580 Merge linked list
The most complete ever!A collection of 47 common terms of "digital transformation", read it in seconds~
[ROS](06)ROS通信 —— 话题(Topic)通信
Unit 11 Serializers
[ROS](02)创建&编译ROS软件包Package
Unit 6 meet ORM
网络剪枝(1)
8581 线性链表逆置
[ROS] (04) Detailed explanation of package.xml
The specific operation process of cloud GPU (Hengyuan cloud) training
![[ROS]roscd和cd的区别](/img/a8/a1347568170821e8f186091b93e52a.png)








