我想用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型指针的主要内容,如果未能解决你的问题,请参考以下文章