使用 memcpy 处理缓冲区

Vamshi_Krishna

我正在尝试创建一个字符缓冲区,如下所示:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct gvk{
  char a ;
  char b ;
  char c ;
};

int main(){
  char *buf;
  struct gvk k = {'A','B','C'};

  memcpy(buf, &k , 3*sizeof(char));
  printf("values in buf is %s\n",buf);
}

但是我的程序退出时说“以非零状态退出”我哪里做错了?

科奇察

上层同事告诉你动态分配内存,但由于它更容易出错更难使用(需要释放内存)然后使用自动数组+你知道编译时的大小,没有理由使用动态分配。我建议您改用自动数组。也不要忘记一个字节的空终止字符。

char buf[4];

如果没有其他方法,我们正在使用动态分配。即使您在编译时不知道数组的大小,从您也可以使用VLA


编译器也可以在结构元素之间/后面添加填充。填充结构成员与“自然”地址边界对齐

在你的情况下,它可能看起来像这样

struct gvk{
  char a ;   // 1B
  char b ;   // 1B
  char c ;   // 1B
             // 1B padding
};

这意味着在这种情况下它应该工作得很好,无论如何你应该避免memcpy(buf, &k , 3*sizeof(char));在这样的结构上使用,因为你可能会复制填充而不是结构的真实元素。


也没有必要显式键入sizeof(char),按照标准,大小为 1 (B)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否在memcpy缓冲区UB上使用reinterpret_cast?

使用memcpy()将缓冲区的尾部移到其开头?(交叠)

Cython如何使用Memcpy从numpy缓冲区复制到C结构?

memcpy指向char缓冲区的指针

对于大型缓冲区,为什么在Ryzen上使用gcc -march = native在32位模式下memcpy会变慢?

使用 python 处理 vi yank 缓冲区

使用统一缓冲区对象的批处理渲染

从字符缓冲区复制时,memcpy 返回垃圾数据

memcpy然后是printf,调用stat(),写入缓冲区;

使用 memcpy 或 strcpy 在子进程中将 c 字符串从 1 个缓冲区复制到另一个缓冲区似乎不起作用

何时使用数组,缓冲区或直接缓冲区

printf()函数如何使用全局缓冲区处理函数返回的字符串?

如何强制OpenGL清除对象以使用QOpenGLWidget进行缓冲区处理?

缓冲区使用哪种硬件

使用JPA的协议缓冲区

C中缓冲区数组的使用

使用 Vader 测试缓冲区列表

使用 Cocoa 渲染像素缓冲区

FileInputStream是否已使用缓冲区?

在Android AudioTrack中使用缓冲区

/记忆/使用中间缓冲区吗?

fread,使用 malloc 作为缓冲区

在磁盘上使用循环缓冲区

使用 GetModuleFileNameEx 分配缓冲区

用于将固定长度的缓冲区复制到结构中的memcpy

在memcpy函数定义中,缓冲区重叠意味着什么?

Memcpy出现访问冲突失败-Vulkan复制到顶点缓冲区

通过memcpy从无符号char *缓冲区中获取较长时间

强制 EnumChildWindows 使用全局缓冲区,而不是本地缓冲区(Python ctypes)