嵌入式技术论坛
直播中

郝埃连

8年用户 1439经验值
私信 关注
[问答]

为什么用rt_memset给数组清零时只能清零一半的数组呢?

用 rt_memset或者memset给数组清零的时候,只能清零一半的数组,用的单片机是ch32v103r8t6 手里只有这一个开发板。没办法测试其他芯片会不会,搞 的我很迷,不知道我哪里搞错了,

2.jpg

结果为

2.jpg

[D/NTC] var:0 0 //这里是赋值
[D/NTC] var:1 1
[D/NTC] var:2 2
[D/NTC] var:3 3
[D/NTC] var:4 4
[D/NTC] var:5 5
[D/NTC] var:6 6
[D/NTC] var:7 7
[D/NTC] var:8 8
[D/NTC] var:9 9
[D/NTC] var:10 10
[D/NTC] var:11 11
[D/NTC] var:12 12
[D/NTC] var:13 13
[D/NTC] var:14 14
[D/NTC] var:15 15
[D/NTC] var:16 16
[D/NTC] var:17 17
[D/NTC] var:18 18
[D/NTC] var:19 19
[D/NTC] var:20 20
[D/NTC] var:21 21
[D/NTC] var:22 22
[D/NTC] var:23 23
[D/NTC] var:24 24
[D/NTC] var:25 25
[D/NTC] var:26 26
[D/NTC] var:27 27
[D/NTC] var:28 28
[D/NTC] var:29 29
[D/NTC] var:30 30
[D/NTC] var:31 31
[D/NTC] var:32 32
[D/NTC] var:33 33
[D/NTC] var:34 34
[D/NTC] var:35 35
[D/NTC] var:36 36
[D/NTC] var:37 37
[D/NTC] var:38 38
[D/NTC] var:39 39
[D/NTC] var:40 40
[D/NTC] var:41 41
[D/NTC] var:42 42
[D/NTC] var:43 43
[D/NTC] var:44 44
[D/NTC] var:45 45
[D/NTC] var:46 46
[D/NTC] var:47 47
[D/NTC] var:48 48
[D/NTC] var:49 49
[D/NTC] var:0 0 //这里是清零后打印出来
[D/NTC] var:1 0
[D/NTC] var:2 0
[D/NTC] var:3 0
[D/NTC] var:4 0
[D/NTC] var:5 0
[D/NTC] var:6 0
[D/NTC] var:7 0
[D/NTC] var:8 0
[D/NTC] var:9 0
[D/NTC] var:10 0
[D/NTC] var:11 0
[D/NTC] var:12 0
[D/NTC] var:13 0
[D/NTC] var:14 0
[D/NTC] var:15 0
[D/NTC] var:16 0
[D/NTC] var:17 0
[D/NTC] var:18 0
[D/NTC] var:19 0
[D/NTC] var:20 0
[D/NTC] var:21 0
[D/NTC] var:22 0
[D/NTC] var:23 0
[D/NTC] var:24 0
[D/NTC] var:25 25
[D/NTC] var:26 26
[D/NTC] var:27 27
[D/NTC] var:28 28
[D/NTC] var:29 29
[D/NTC] var:30 30
[D/NTC] var:31 31
[D/NTC] var:32 32
[D/NTC] var:33 33
[D/NTC] var:34 34
[D/NTC] var:35 35
[D/NTC] var:36 36
[D/NTC] var:37 37
[D/NTC] var:38 38
[D/NTC] var:39 39
[D/NTC] var:40 40
[D/NTC] var:41 41
[D/NTC] var:42 42
[D/NTC] var:43 43
[D/NTC] var:44 44
[D/NTC] var:45 45
[D/NTC] var:46 46
[D/NTC] var:47 47
[D/NTC] var:48 48
[D/NTC] var:49 49

各位能不能告诉我下到底是哪里的问题啊

回帖(1)

刘强

2023-1-31 15:18:13
使用man memset查看接口的帮助信息:

NAME
       memset - fill memory with a constant byte
SYNOPSIS
       #include
       void *memset(void *s, int c, size_t n);
DESCRIPTION
       The memset() function fills the first n bytes of the memory area pointed to by s with the constant byte c.
RETURN VALUE
       The memset() function returns a pointer to the memory area s.
注意描述那一段,memset是按字节数来操作的;
而你定义的u16 num[50];这里不是50字节啊,
这里是sizeof(u16) x 50 = 100字节啊!
所以修改成

memset(num, 0, 100); //注意是100字节
或者
memset(num, 0, sizeof(num)); //用sizeof自己去计算字节数,调用者不用去填多少个字节,移植性也较好
这样就能解除你的疑惑了。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分