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.
评论区