- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 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);
}
如果您更喜欢使用malloc
和free
,那么您的代码将更像这样:
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/
我有一个名为 FeedView 的 View ,由 FeedViewController 处理。 我还有一个名为“NearestStore”的 XIB,它由一个名为“NearestStoreViewC
我有一个警报表,其中 tr 元素是使用 JS 动态添加/删除的。问题是它有一个 border-top 将它与上面的内容分开,当表格为空时我想隐藏这些内容。我试过 :empty 和 display:no
我是一名优秀的程序员,十分优秀!