首页IT科技sizeof在c语言中是什么意思偏移量是什么(C语言学习笔记—sizeof关键字和strlen函数)

sizeof在c语言中是什么意思偏移量是什么(C语言学习笔记—sizeof关键字和strlen函数)

时间2025-08-02 20:44:30分类IT科技浏览5030
导读:sizeof和strlen在C语言中常用来计算字符大小和长度,在应用中却有着本质的区别。...

sizeof和strlen在C语言中常用来计算字符大小和长度                ,在应用中却有着本质的区别                。

sizeof是C语言中的关键字                      ,其作用是返回一个对象或类型所占的内存字节数                      。使用方式为:

strlen() 函数从字符串的开头位置依次向后计数       ,直到遇见\0            ,然后返回计时器的值       。最终统计的字符串长度不包括\0            。使用方式为:

char str[30] = "abc defg"; // printf("strlen(str) = %d \n", strlen(str)); // 带上空格总共8字符

上述为sizeof关键字和strlen函数的基本用法                       ,在实际应用或面试中          ,应多注意两者区别:

1              、sizeof关键字在编译时期就已经确定        ,stelen函数在运行时期确定                       。

int a = 1; ​ printf("%d", sizeof(a++)); printf("%d", a);

上述代码运行结果为4                        ,1          。因为sizeof是关键字              ,所以在第一行输出时a++不会运行    ,括号内的参数并不会参与计算        。这也正证实sizeof关键字在编译时期已经确定                        ,系统认为是常数                        。

其实上述代码也可作为分辨关键字和函数的区别                  ,当然用指针取址的方法也可分别关键字和函数的区别              。

int b = 10; void* a = &sizeof(b);

这行代码会运行错误,如果sizeof为函数                    ,则指针可指向sizeof的地址                      ,但因为是关键字    ,取址会导致编译错误    。

2                       、sizeof和strlen的结束符占有大小不同                        。

sizeof("\0") = 2; strlen("\0") = 0;

strlen是计算字符串的长度                ,在C/C++中字符串以“\0                ”结尾                  。

sizeof计算操作数的存储大小                      ,“\0                      ”占两字节。

3        、strlen返回值为size_t,为无符号整型                    。

char a[10] = "abcd"; char b[10] = "a"; if (strlen(b) - strlen(a) > 0) { printf("字符串b 比 字符串a 长 \n"); } else { printf("字符串a 比 字符串b 长 \n"); }

上述代表运行结果为“字符串b比 字符串a 长        ”       ,导致这个输出结果的原因为size_t为无符号整型            ,所以strlen(b)结果为大于0的数                       ,strlen(a)结果为大于0的数          ,两个size_t相减也为size_t类型        ,结果也一定大于0.

4           、strlen()定义字符串数组时                        ,一定要初始化                      。

char test[50]; // 未初始化 printf(" test[] = "); for (int i = 0; i < 26; i++) { test[i] = A + i; printf(" %c ", test[i]); } printf("\n stelen(test) = %d \r\n", strlen(test));

上述看到strlen计算出的结果是77              ,显示是错误的

原因:test字符串在定义时未初始化    ,test字符串在定义时                        ,拿到一片内存                  ,此时这片内存里面可能储存有值,导致使用strlen计算test字符串时找不到字符串结束标志 ’\0‘                    ,而会在test申请的那片内存后面一直找下去                      ,找到 ’\0‘ 后输出    ,计算的结果                ,此时输出的结果肯定错误的结果    。

以上为网上资料和个人的一些理解                      ,如有错误       ,请指正                。

资料出处

https://blog.csdn.net/qq_45809384/article/details/124705939

https://blog.csdn.net/u013812502/article/details/81198452

声明:本站所有文章            ,如无特殊说明或标注                       ,均为本站原创发布                      。任何个人或组织          ,在未征得本站同意时        ,禁止复制                      、盗用            、采集        、发布本站内容到任何网站                      、书籍等各类媒体平台       。如若本站内容侵犯了原著者的合法权益                        ,可联系我们进行处理            。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
w10过期后如何输入激活码(Win10过期了如何激活?Win10过期了重新激活教程) wordpress搭建个人博客教程(免费WordPress博客:打造个人品牌的最佳选择)