Tag: memcpy

使用memcpy将数据从缓冲区存储到struct中

我有sflow数据包捕获代码,我需要从缓冲区打印sflow数据信息。 我已经为所需信息定义了结构,并尝试使用memcpy将缓冲区信息复制到结构中。 当我打印字段时,我得到了一些不正确的值。 附加了下面的结构代码: typedef unsigned char mac[6]; typedef unsigned char ip_v4[4]; typedef unsigned char ip_v6[16]; typedef unsigned int header_protocol; /* Packet header data */ const MAX_HEADER_SIZE = 256; /* The maximum sampled header size. */ struct sampled_header { header_protocol protocol; /* Format of sampled header */ unsigned int frame_length; /* Original length of packet […]

为什么允许使用memcpy使用指向它的指针覆盖const变量?

为什么允许使用memcpy指向它来更改const变量? 这段代码: const int i=5; int j = 0; memcpy(&j, &i, sizeof(int)); printf(“Source: i = %d, dest: j = %d\n”, i,j); j = 100; memcpy(&i, &j, sizeof(int)); printf(“Source: j = %d, dest: i = %d\n”, j,i); return 0; 编译只是一个警告: 警告:传递’memcpy’的参数1从指针目标类型中丢弃’const’限定符[默认启用] 但确实运行得很好,并改变了const变量的值。

为什么我不能在memcpy中使用const参数?

我有一个struct cVector3d ,我struct cVector3d它像这样的char数组: void insert_into_stream(std::ostream& stream, cVector3d vector) { int length = sizeof(double)*3; char insert_buffer[sizeof(double)*3]; memcpy(insert_buffer, &vector[0], length); stream.write(insert_buffer, length); } 如果我在参数列表中使用const cVector3d vector ,那么我得到一个“ & requires l-value ”错误。

如何在linux中使用DMA处理memcpy

我在我的程序中使用memcpy()。 随着我增加变量的数量,不幸的是CPU使用率增加了。 就像使用for循环迭代运行memcpy一样。 Linux中是否有快速memcpyfunction? 我应该使用补丁并编译内核吗?

当memcpy应该足够时,为什么存在wmemcpy?

wmemcpy似乎执行与memcpy相同的操作但接受wchar_t*而不是void* 。 如果这两个代码片段应该具有相同的行为,它的存在是否合理? 它有用吗? memcpy(dest, wchar_array, sizeof(wchar_array)); 和 wmemcpy(dest, wchar_array, sizeof(wchar_array) / sizeof(wchar_t));

了解memcpy()的实现

我正在寻找memcpy.c的实现,我发现了一个不同的memcpy代码。 我不明白为什么他们这样做(((地址)s)|((ADDRESS)d)| c)&(sizeof(UINT) – 1) #if !defined(__MACHDEP_MEMFUNC) #ifdef _MSC_VER #pragma function(memcpy) #undef __MEMFUNC_ARE_INLINED #endif #if !defined(__MEMFUNC_ARE_INLINED) /* Copy C bytes from S to D. * Only works if non-overlapping, or if D < S. */ EXTERN_C void * __cdecl memcpy(void *d, const void *s, size_t c) { if ((((ADDRESS) s) | ((ADDRESS) d) | c) […]

在C中取消引用函数指针以访问CODE内存

我们在这里处理C. 我只是有了这个想法,想知道是否有可能访问存储函数的内存点,比如说foo并将函数的内容复制到内存中的另一个点。 具体来说,我试图让以下工作: #include #include #include void foo(){ printf(“Hello World”); } int main(){ void (*bar)(void) = malloc(sizeof foo); memcpy(&bar, &foo, sizeof foo); bar(); return 0; } 但运行它会出现总线错误: Bus error: 10 。 我正在尝试将函数foo的内容复制到内存bar空间,然后执行新创建的functionbar 。 除了查看这样的事情是否可能之外,没有其他原因可以揭示C语言的复杂性。 我没想到这有什么实际用途。 我正在寻找指导让这个工作,或以其他方式被告知,有理由,为什么这不起作用 编辑查看一些答案并了解读取 , 写入和可执行内存,我刚才意识到可以通过写入可执行内存在C中动态创建函数。

如何在C中将数组拆分为两个数组

假设我在C中有一个数组 int array[6] = {1,2,3,4,5,6} 我怎么能把它分成两部分 {1,2,3} 和 {4,5,6} 使用memcpy可以实现吗? 谢谢, 不不不

如何在C中记忆二维数组的一部分?

如何在C中记忆二维数组: 我有一个二维数组: int a[100][100]; int c[10][10]; 我想使用memcpy将数组c中的所有值复制到数组a,如何使用memcpy执行此操作? int i; for(i = 0; i<10; i++) { memcpy(&a[i][10], c, sizeof(c)); } 它是否正确?

memcpy的内部实现如何工作?

标准C函数’memcpy’如何工作? 它必须将(大)RAM块复制到RAM中的另一个区域。 因为我知道你不能在汇编中直接从RAM移动到RAM(使用mov指令)所以我猜它在复制时使用CPU寄存器作为中间存储器? 但它是如何复制的? 通过块(如何通过块复制?),按单个字节(char)或它们具有的最大数据类型(复制在long long double中 – 在我的系统上为12个字节)。 编辑: 好吧显然你可以直接将数据从RAM移动到RAM ,我不是汇编专家,所有我学习的汇编都来自这个文档( X86汇编指南 ),在有关你无法从中移动的mov指令的部分中提及RAM到RAM。 显然这不是真的。