• 已解决 46896 个问题
  • 已帮助 5897 位优秀工程师

stm32中 sizeof() 计算长度问题

liangeeg 2019-11-21 浏览量:457

unsigned char H1[] = "1234567890";
unsigned char H2[] = "123456789“

printf("H1 len is %d.\r\n"sizeof(H1));

printf("H2 len is %d.\r\n"sizeof(H2));


输出结果

H1 len is 11.

H2 len is 10.


输出结果比实际长度多1 ,请问问题出在哪里,用什么方法可以准确计算长度



0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 用双引号括起的字符串定义时,默认包含一个‘\0'字符作为结尾,所以上面程序结果是准确的。

    因为这个是确定的,你只需要减去1就好。

    比如

    printf("H1 len is %d.\n" sizeof(H1)-1);

    printf("H2 len is %d.\n" sizeof(H2)-1);


    另外注意一般的回车只需要\n,\r\n是微软系统的习惯而已。

    • 发布于 2019-11-21
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:4
  • 字符串最后有一个空符号,也就是\0,这个字符是判断字符串结尾的,不会在字符串定义时显示,属于隐藏字符
    • 发布于2019-11-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 这个是正常的,最后都是多了一个 /0的,这个是字符串结束的标志。
    • 发布于2019-11-22
    • 举报
    • 评论 0
    • 0
    • 0

  • sizeof函数就是这样的,会加一个变量类型大小的结束符

    如果你的变量里面没有\0结束符可以用strlen来计算长度

    • 发布于2019-11-22
    • 举报
    • 评论 0
    • 0
    • 0

  • 如果用不定长度的数组,在定义的时候,它会自动在最后加个\0,导致比实际长度多1
    • 发布于2019-11-29
    • 举报
    • 评论 0
    • 0
    • 0

stm32中 sizeof() 计算长度问题