C语言中:strlen和sizeof的区别和它们分别交换各自作用领域(问题)时的细微差别!!!

本人c语言初学菜鸟一枚,今天通过敲了一段简单代码,发现strlen和sizeof之间的一些关系,总结如下:

  1. 用strlen计算数组长度要考虑进去
  2. 用sizeof计算字符串长度也要考虑进去
  3. 而sizeof在计算数组和strlen计算字符串长度(它们自己的领域里面)则不需要考虑
  4. 总结:字符数组与字符串不是相同的东西,在计算长度时,要用各自该用的东西(数组用sizeof,字符串用strlen)

例如下面这段代码,计算数组长度用到了strlen,那么b[]内必须为4,要考虑,且不能为其他数字,否则编译运行出来结果将为别的错误答案;然而将strlen改为sizeof,则,b[]内为3,不需要考虑,

填大于3的数字,假设为i,结果输出长度为i,不填也可以,将根据你{ }内实际的个数得到答案(题目中b[]不填输出为3),但是如果填了小于i的数,那么编译将不通过,编译器提示:error C2078: 初始值设定项太多。

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include<string.h>
 4 
 5 int main()
 6 {
 7     char b[4] = {98,68,96};
 8     printf("%d
", strlen(b));
 9     system("pause");
10     return 0;
11 }

 另外:根据上面的程序还有注意的地方:

float b[ ],sizeof长度为4乘花括号内个数,char型为1乘,int为 4乘,double为8乘

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
int main()
{
    float  b[] = {2,3};
    printf("%d
", sizeof(b));
    system("pause");
    return 0;
}

下面和上面代码区别b[ ]={2,3}内加上了6,则sizeof计算数组长度时按照6来计算,结果为48(6*double的长度),另外定义数组时{ }内不能为空,否则会报错

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include<string.h>
 4 int main()
 5 {
 6     double  b[6] = { 2, 3 };
 7     printf("%d
", sizeof(b));
 8     system("pause");
 9     return 0;
10 }
原文地址:https://www.cnblogs.com/hetaoyuan/p/10076915.html