1. sizeof在和strlen在查询char数组大小时的区别
sizeof在查char数组的大小的时候,返回的是char数组的大小,即定义时数组的大小
strlen在查char数组的大小的时候,返回的是不包含\0的字符长度
示例1:
解析: 定义数组的时候输入字符串,其实定义的数组的长度是char arry[13];
此时,读取的sizeof的长度是13,而strlen的长度是12
strlen就不包含字符串结束符\0的长度了
第二次将字符创清空后,给字符串复制"CPlus"
此时输入的sizeof()的长度依然是定义数组arry时的长度
而strlen的长度则是真实的存储了5个字符的字符长度。
a. 源码
// Len_sizeof.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
// 定义数组 arry
char arry[] = { "Hello World!"};
// 在使用数组时得到的长度
int of1 = sizeof(arry);
int len1 = strlen(arry);
// 输出数组第一次赋值后sizeof 和strlen打印的值
printf("of1(sizeof) = %d\n", of1);
printf("len1(strlen) = %d\n", len1);
// 清空数组的内容
memset(arry, 0, sizeof(arry));
// 给数组中存入 小于数组原始长度的字符 “CPlus”
strcpy_s(arry, "CPlus");
printf("\n");
// 获取当下数组的相关长度
of1 = sizeof(arry);
len1 = strlen(arry);
// 输出数组第二次赋值后sizeof 和strlen打印的值
printf("of1(sizeof) = %d\n", of1);
printf("len1(strlen) = %d\n", len1);
return 0;
}
b. 执行结果
1. sizeof在和strlen在查询char指针时的区别
sizeof()在传入char指针的时候,获取的是指针的地址的大小
strlen在传入指针的时候,获取的是指针指向的存储的字符的大小
解析: 第一次给字符串赋值"Hello World!"的时候,sizeof()获取的值是4;
第二次给字符串赋值"CPlus"的时候,sizeof()获取的值还是4
而strlen()第一次获取的值是12,第二次获取的值是5,每次都是存储的字符串的长度
a. 源码:
// Len_sizeof.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
// 定义数组 arry
char arry[] = { "Hello World!"};
char* ptrArry = arry;
// 在使用数组时得到的长度
int of1 = sizeof(ptrArry);
int len1 = strlen(ptrArry);
// 输出数组第一次赋值后sizeof 和strlen打印的值
printf("of1(sizeof) = %d\n", of1);
printf("len1(strlen) = %d\n", len1);
// 清空数组的内容
memset(arry, 0, sizeof(arry));
strcpy_s(arry, "CPlus");
ptrArry = arry; // 给数组中存入 小于数组原始长度的字符 “CPlus”
printf("\n");
// 获取当下数组的相关长度
of1 = sizeof(ptrArry);
len1 = strlen(ptrArry);
// 输出数组第二次赋值后sizeof 和strlen打印的值
printf("of1(sizeof) = %d\n", of1);
printf("len1(strlen) = %d\n", len1);
return 0;
}
b. 执行结果