gpt4 book ai didi

c - 带有空指针的 Memcpy

转载 作者:行者123 更新时间:2023-12-02 07:03:11 24 4
gpt4 key购买 nike

我在使用 memcpy 函数时遇到问题。我需要一个将数据存储到 void 指针中的函数。这是一个简单的例子:

void saveData(void* data)
{
char inputData[] = "some data";
memcpy((char*)data, inputData, sizeof(inputData));
}

然而,当我这样做时,我会遇到段错误,即使它编译得很好。我的函数参数必须是一个 void 指针,因为我可能有不同的数据格式要输入,而且我可能无法提前知道数据的大小。有人可以告诉我我做错了什么吗?

谢谢你。

***更新:感谢大家的帮助。正如你们大多数人所指出的,我没有初始化 void* data。那修好了。现在我的问题是:当我为 void* data(甚至 char* data)做动态分配时,我给它一个大小,但是当我做 memcpy,它允许我写一个比我第一次分配空间更大的字符串。我也试过只做 char* data,同样的事情发生了。这是我的示例代码:

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 个字符。这不应该给我一个错误吗?

最佳答案

您的函数参数 data 需要指向有可用内存的地方。你可以这样做:

int main()
{
char myString[256];
saveData((void*)myString);
}

如果您更喜欢使用mallocfree,那么您的代码将更像这样:

int main()
{
char* myString = (char*)malloc(256);
saveData((void*)myString);
free(myString);
}

..这两种方法的问题在于您不知道字符串需要多长。使用 std::string 会更安全/更容易。

std::string myString;  // an empty string
myString += "some data"; // append a string

关于c - 带有空指针的 Memcpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16907300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com