我遇到memcpy函数有问题。我需要一个将数据存储到void指针的函数。这里有一个简单的例子:带空指针的Memcpy
void saveData(void* data)
{
char inputData[] = "some data";
memcpy((char*)data, inputData, sizeof(inputData));
}
但是,当我这样做,即使它编译得很好,我得到分割错误。我的函数参数必须是一个无效指针,因为我可能有不同的数据格式输入,我可能不会提前知道数据的大小。有人能告诉我我做错了什么吗?
请谢谢。
** UPDATE: 感谢所有的有用的反应。正如大多数人指出的那样,我没有初始化void数据。这解决了它。 现在我的问题是:当我为void *数据(甚至char *数据)进行动态分配时,我给它一个大小,但是当我做memcpy时,它允许我写一个比我第一次分配空间更大的字符串对于。我也试着只是在做char *数据,并且发生同样的事情。这是我的示例代码:
char inputData[] = "123456789";
void* data1 = malloc(5*sizeof(char));
char* data2 = (char*)malloc(5*sizeof(char));
memcpy(data1,inputData,sizeof(inputData));
memcpy(data2,inputData,sizeof(inputData));
当我打印出来的结果,inputData的整个字符串被复制,即使我只为5个字符分配足够的空间。这不应该给我一个错误?
显示来电,这就是问题的所在。它传递给你一个你无法通过的指针。 – Barmar
你'malloc()'有足够的内存来存储'数据'吗? – SpacedMonkey
分段错误,在这种情况下,意味着'数据'可能小于文本数据的大小。从外观上看,它应该至少有10个字节 – tay10r