Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何清除指针变量,该变量保存着需要从起始位置清除20字节数据的内存起始位置_C_Pointers_Embedded - Fatal编程技术网

C 如何清除指针变量,该变量保存着需要从起始位置清除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函

指针变量保存的值只不过是内存位置的地址,需要为下一个20字节的数据清除该地址

我尝试了下面的代码片段,但它清除了起始内存位置的指针值地址的值。这样,我丢失了内存位置指针值的起始地址

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)