当前位置:首页 » 《随便一记》 » 正文

C:sizeof运算符的一个陷阱

29 人参与  2022年11月07日 18:49  分类 : 《随便一记》  评论

点击全文阅读


sizeof运算符通常用于获取变量或类型所占内存的大小(单位是字节)

#include <stdio.h>struct D{    char a;    int b;};int main(){    int a = 0;    struct D d;    printf("sizeof(a)=%ld\n", sizeof(a));    printf("sizeof(int)=%ld\n", sizeof(int));    printf("sizeof(d)=%ld\n", sizeof(d));    printf("sizeof(struct D)=%ld\n", sizeof(struct D));    return 0;}

运行程序输出:

sizeof(a)=4
sizeof(int)=4
sizeof(d)=8
sizeof(struct D)=8

使用此特性可以结合memset,对数据结构进行初始化:

#include <stdio.h>#include <string.h>struct D{    char a;    int b;};int main(){D d;printf("before init:a=%d, b=%d\n", d.a, d.b);memset(&d, 0, sizeof(d));printf("after init:a=%d, b=%d\n", d.a, d.b);    return 0;}

运行程序输出:

before init:a=16, b=0
after init:a=0, b=0

不过在使用sizeof时需要注意,对于指针类型的变量,只会求值指针的大小,不会求值其指向内容的大小:

#include <stdio.h>int main(){    char str[10] = {0};    char* pStr = str;    printf("sizeof(str)=%ld\n", sizeof(str));    printf("sizeof(pStr)=%ld\n", sizeof(pStr));    return 0;}

运行程序输出:

sizeof(str)=10
sizeof(pStr)=8

这对于通过函数参数进行sizeof求值是一个陷阱:

#include <stdio.h>#include <string.h>void f(char *pStr){memset(pStr, 'a', sizeof(pStr));printf("pStr:%s sizeof(pStr)=%ld\n", pStr, sizeof(pStr));}int main(){    char str[10] = "123456789";    printf("str:%s sizeof(str)=%ld\n", str, sizeof(str));    f(str);    return 0;}

运行程序输出:

str:123456789 sizeof(str)=10
pStr:aaaaaaaa9 sizeof(pStr)=8

可见,在函数f内,通过指针pStr求值sizeof,获得的是指针的大小(64位系统上位8个字节),如果依据此指来初始化str,那么只能操作8个字节,也就导致了调用函数f后,str进入了一种混乱的状态,其内容为:aaaaaaaa9


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/47351.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 邻居低素质,而我没素质独家番外_老太太赖皮欣欣超长版_小说后续在线阅读_无删减免费完结_
  • 重生后我转嫁首富瘸腿独子,总裁前夫却疯了一口气看完_妹妹傅云琛沈明辉独家番外_小说后续在线阅读_无删减免费完结_
  • 我拒绝给系花捐款后,全系同学悔疯了在线阅读_小说后续在线阅读_无删减免费完结_
  • 我让位给女友的透视眼竹马,他却说如果能重生再也不来了。虐心反转_玉石林若女友推荐_小说后续在线阅读_无删减免费完结_
  • 相国独子的丫鬟砸坏我的玉佩后,我当场拒婚阅读_玉佩陈郡谢氏全新_小说后续在线阅读_无删减免费完结_
  • 手术时,我看着病人惨死最新试读_淼淼陆知衍姜颜全本完结_小说后续在线阅读_无删减免费完结_
  • 男友霸道给我开黑卡,转头却骂我是捞女最新章节_肖年顾客黑卡热文_小说后续在线阅读_无删减免费完结_
  • 他在回忆尽头全集_贺南舟许清梨叶絮完结txt_小说后续在线阅读_无删减免费完结_
  • 旅游结婚那天未婚夫另娶女秘书,我让他们一无所有连载_老公迎宾超长版_小说后续在线阅读_无删减免费完结_
  • 完结文异界修仙我的直播间能打赏核弹列表_完结文异界修仙我的直播间能打赏核弹(江流年沈红菱)
  • 全书浏览陪弟弟混骑行圈,离婚你哭什么?(韩星河柳千雪)_陪弟弟混骑行圈,离婚你哭什么?(韩星河柳千雪)全书结局
  • 老公出轨我助攻虐心反转_秦绍卿卿阿溪后续加长_小说后续在线阅读_无删减免费完结_

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1