C:带有NULL字符的memcpy()

时间:2016-07-12 03:10:49

标签: visual-c++ null memcpy

我有一个可以打印文本和图像的C ++代码。当它们单独运行时,两者都正常工作。现在,我想合并打印,这样我就可以将图像嵌入到我想要的任何地方。

data = "TEXT [LOGO] TEXT";

假设我有上面的数据。对于这样的数据,我想在这里做的是将[LOGO]替换为收据打印的实际数据。图像数据存储在文件中(ESC Pos Commands Plus图像数据)。

文本文件中的示例图像数据..

  

1b40 1b61 011b 3308 1b2a 01f0 003f 7f7f
  fff ffff fff fff ffff fff fffff ffff
  fff ffff fff fff ffff fff fffff ffff
  fff fff ffff fff ffff fefe fcfc f8f8
  f0f0 e0e1 c1c3 8707 0f0f 0000 0000 0000

我重复使用搜索和替换功能.. from this link...

为简单起见,我们只是引用一个简单的memcpy来电......

char *temp = (char*) calloc(dataLength,dataLength * sizeof(char*));
memcpy(temp, logoBuffer, logoSize);

现在问题是logoBuffer包含很多' NULL字符'。在复制过程中,数据被删除了。

这有什么解决方法吗?用完了想法......

1 个答案:

答案 0 :(得分:1)

根本问题是您希望将二进制数据存储在文本文件中。您通常不能这样做,因为二进制数据不是文本数据 1 ,尽管文本数据是二进制数据。您需要使用适当的函数或函数参数使文件成为二进制文件并对其进行读/写。除此之外,您似乎遇到了种不同语言的问题,请阅读此链接以了解相关内容。

例如,你做错了动态内存分配,你只是分配比你显然想要的更多的空间,从而不会造成任何明显的问题。但是你分配错误大小这一事实意味着你可能很容易做一些会产生非常悲惨结果的事情,以便理解为什么我这样读了关于未定义行为的概念。

1 并非每个字节都有文本表示,因此不是每个字节序列都可以使用或被视为文本