C 如何清除指针变量,该变量保存着需要从起始位置清除20字节数据的内存起始位置
指针变量保存的值只不过是内存位置的地址,需要为下一个20字节的数据清除该地址 我尝试了下面的代码片段,但它清除了起始内存位置的指针值地址的值。这样,我丢失了内存位置指针值的起始地址C 如何清除指针变量,该变量保存着需要从起始位置清除20字节数据的内存起始位置,c,pointers,embedded,C,Pointers,Embedded,指针变量保存的值只不过是内存位置的地址,需要为下一个20字节的数据清除该地址 我尝试了下面的代码片段,但它清除了起始内存位置的指针值地址的值。这样,我丢失了内存位置指针值的起始地址 srcadr = 0x105fc080; i = 20; *srcptr = &srcadr if(srcptr != NULL) { while (i < 20) { *srcptr++ = 0x00; } } 使用string.h库中的memset函
srcadr = 0x105fc080;
i = 20;
*srcptr = &srcadr
if(srcptr != NULL)
{
while (i < 20)
{
*srcptr++ = 0x00;
}
}
使用string.h库中的memset函数
#include <string.h>
char *srcadr = 0x105fc080;
int size = 20;
memset(srcdr,0,size);
您的代码不完整 但让我们假设第一行是有效的:
srcadr = 0x105fc080;
这意味着srcadr可以是无符号int或无符号long
然后我们需要将其视为指针,并从该地址中清除20个字节:
volatile unsigned char * const area = (unsigned char *) srcadr;
for(int i = 0; i < 20; ++i)
area[i] = 0;
我们必须完成。但是OP不能使用它,不管出于什么原因,也许它是一个嵌入式环境,有一个有限的标准库,还有,呃,没有内部函数的单调编译器。如果你只想将20字节的内存设置为0,你可以使用memset。 你所要做的就是:
#include <string.h>
mem_len = 20
mem_value = 0
ptr = 0x105fc080
memset(ptr. mem_value, mem_len)
这个代码没有任何意义*srcptr=&srcadr将指针设置为指向srcadr的地址,而不是指向绝对地址0x105fc080。此外,没有人能在不看到变量声明的情况下回答这个问题。此外,这与嵌入式系统、智能指针和无效指针有什么关系?空气中是否有强烈的XY问题气味?此外,首先,此代码对于更新原始内存位置是不正确的,因为您不使用volatile限定符。除了上面提到的其他问题。。。在开始修改指针之前复制一份怎么样;不是有效的C,因此此代码无法编译。**由于项目中的约束,memset不可用unwind的答案似乎有效且正确。绝对地址很奇怪,地址从哪里来。此外,循环不会更改i的值。
#include <string.h>
mem_len = 20
mem_value = 0
ptr = 0x105fc080
memset(ptr. mem_value, mem_len)