我想用memset初始化,就像memset(map_page_buf,0x5DB3C70E ,1*sizeof(int)); map_page_buf为int型指针

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想用memset初始化,就像memset(map_page_buf,0x5DB3C70E ,1*sizeof(int)); map_page_buf为int型指针相关的知识,希望对你有一定的参考价值。

如何把0x5DB3C70E 写进一map_page_buf指向的地址为起始地址的四个字节中呢~谢谢各位大虾了。

参考技术A #include <string.h>
void *memset( void *buffer, int ch, size_t count );
功能: 函数拷贝ch 到buffer 从头开始的count 个字符里, 并返回buffer指针。 memset() 可以应用在将一段内存初始化为某个值。

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])

int *map_page_buf ;
int address = 0x5DB3C70E;
printf("%x\n",*map_page_buf);
/*
其实下面的 memcpy 和 :
*map_page_buf = address;
效果是一样的。
*/
memcpy(map_page_buf,&address ,sizeof(address));
// *map_page_buf = address;
printf("%x\n",*map_page_buf);
return 0;
参考技术B 你可以用memcpy

int map_page_buf_data = 0x5DB3C70E;
memcpy(&map_page_buf,&map_page_buf_data ,1*sizeof(int));本回答被提问者采纳
参考技术C int data=0x5DB3C70E;
memcpy(map_page_buf,&data ,1*sizeof(int));

使用 memset 时出现“类型参数”警告

【中文标题】使用 memset 时出现“类型参数”警告【英文标题】:I'm having an `argument of type` warning while using memset 【发布时间】:2015-08-02 08:36:42 【问题描述】:

我有数组;

volatile uint32_t SoftTimers[8] ;

我想在程序中将我的数组所有内容重置为零(不是初始化)。我搜索了这个并找到了memset。但是我在使用这个功能时有这个警告(不是错误),这是一个问题吗?

我这样使用memset

memset(SoftTimers, 0, sizeof(SoftTimers));

这是警告信息:

警告:#167-D:“volatile uint32_t *”类型的参数与“void *”类型的参数不兼容

【问题讨论】:

【参考方案1】:

在这种情况下你不能使用 memset,因为它需要一个非易失性指针,而你试图传递一个易失性指针:

6.7.3 类型限定符

    如果尝试 通过使用左值来引用使用 volatile 限定类型定义的对象 对于非 volatile 限定类型,行为未定义。

编写你自己的函数,它接受一个指向volatile uint32_t 类型的指针。

【讨论】:

我明白了,有没有比 for 循环更快的方法来做这个操作? 我打算在中断处理程序中使用这个memset 函数。所以我不想在那里花太多时间。我试图提高效率 @abdullahcinar 首先确保代码正确。您可以稍后再担心速度。 当我使用 for 循环重置时这是正确的。我只是想花更少的时间。但你是对的,重要的是它的工作正常。感谢您的回复:)

以上是关于我想用memset初始化,就像memset(map_page_buf,0x5DB3C70E ,1*sizeof(int)); map_page_buf为int型指针的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 memset 初始化具有非 0 值的缓冲区? [复制]

使用 memset 时出现“类型参数”警告

使用 memset 初始化包含数组的结构向量

C分配双精度的动态数组并用memset初始化它[重复]

向量 C++ 上的 Memset

关于memset()