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

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

 

 

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

 

 

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

填大于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\n", 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\n", 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\n", sizeof(b));
 8     system("pause");
 9     return 0;
10 }

 

转载于:https://www.cnblogs.com/hetaoyuan/p/10076915.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值