C语言中数据长度解析

本文探讨了C语言中数据长度的问题,特别是`strlen`函数在计算字符串长度时如何处理,以及`char`类型数据的大小范围。通过示例解释了补码表示法在负数和无符号数中的应用,指出当`strlen`遇到`char`类型的负数时,由于最高位丢失导致的计算现象。文章以-128到-256的转换为例,解释了为何程序输出为255。
摘要由CSDN通过智能技术生成

在《C语言深度剖析》一书中看到下面这个问题,正好趁此机会,把这个数据类型的长度问题理清一下。下面的这段程序会输出什么值?

#include<stdio.h>

int main(){
	char a[1000];
	int i;
	for(i = 0; i < 1000; i++){
		a[i] = -1 - i;
	}
	printf("strlen(a) = %d\n",strlen(a));
	return 0;
}

刚看到这个问题的时候,云里雾里的,这是什么鬼,一般想到的就是1000了。但是其实输出之后是255。

要弄清这个问题,有两个点:1、strlen函数计算长度时是怎么算的?2、char型数据的值得大小范围。

对于第一个问题,这里先提一点,很多时候我们不是太清楚sizeof和strlen的区别,记住一点:sizeof是关键字,不是函数;而strlen是函数。在strlen计算一个字符串的长度的时候,它遇到字符串结束符“\0”时就结束了,并且这结束符不会计算在长度里面。那么上面怎么到256的时候就结束了呢?

下面说明第二个问题,不管是在32位还是64位的机器&

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值