C语言——强化记忆strlen与sizeof

由于我的记性比较差,故作此篇来提醒自己。

首先:

strlen和sizeof两个东西没有什么关联

之后:

详细解释
sizeof运算符
        sizeof运算符允许程序存储指定类型值所需的空间大小。表达式的值是一个无符号整数,代表存储属于类型名的值所需要的字节数。

\0在其中算一个字符

strlen库函数-要引头文件
        是计算字符串长度的,计算字符串长度时\0是结尾的标志,不算做字符数量。只有从前往后数的时候碰到\0才会停止

\0在其中不算一个字符,字符串结束的标志

对比:

#include<stdio.h>
//求字符串长度的库函数
#include<string.h>
int main(void)
{
//定义一个字符串
//这里涉及到一点数组的知识
//这个数组没有指定大小,直接进行初始化,
//他会根据初始化的内容,来确定数组有几个元素。
char arr1[] = "abcdef";
//计算arr1这个数组占几个元素
//占 a b c d e f \0 这7个元素
printf("%d\n", sizeof(arr1));//输出7
//计算字符串长度
//\0之前的字符个数
//a b c d e f 这6个字符
printf("%d", strlen(arr1));//输出6
return 0;
}

例题

请问以下代码中的4个printf分别打印什么

#include<stdio.h>
#include<string.h>
int main(void)
{
char arr1[] = "abc";
char arr2[] = { 'a','b','c' };
printf("%d\n",sizeof(arr1));
printf("%d\n",sizeof(arr2));
printf("%d\n",strlen(arr1));
printf("%d\n",strlen(arr2));
return 0;
}

想一下
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

4 3 3 3 ?
答案是
4 3 3 15
这是为什么呢?
答:最后一个输出为15,这是因为在数组arr2中没有\0作为结尾,所以计算的值是个随机值。
补充知识:单引号里面放的是字符,双引号里面放的是字符串。
当输入为字符串(即arr1)的时候编译器会在结尾自动添加\0,
而当输入字符的时候,字符数组(即arr2),并不会自动补\0.