写入C中的给定void *内存位置

时间:2010-11-04 00:20:20

标签: c pointers

我有一个函数,它的参数之一是“void * buffer”。在这个函数中,我需要写入该内存位置。但是,做一些像

这样的事情
*buffer = "Hello\0Hi\0";

不起作用,因为我无法取消引用void *指针。如何将字符串数据放入该内存位置?请注意,我需要复制数据,不一定是字符串,因为它可能包含空字符。

更新了以反映strcpy不够

2 个答案:

答案 0 :(得分:6)

如果字符串“可能包含空字符”,那么它实际上不是C字符串。

如果需要将一定数量的字节从一个内存位置复制到另一个内存位置,无论内容如何,​​都可以使用memcpy。您可以使用sizeof获取字符串文字的大小(此大小包括最终的隐式空终止符)。

答案 1 :(得分:3)

您无法使用赋值运算符复制字符串。你需要使用像strcat这样的东西(顺便说一下,它非常不安全)。

你可能正在寻找

strcpy( (char *) buffer, "Hello");

或者更好的是,使用strncpy。您绝对需要传递缓冲区的大小并确保不会超出它,否则您的应用程序中会有一个巨大的安全漏洞,更不用说无数难以跟踪的漏洞的来源。