我在下面的代码中遇到了strncpy的访问冲突。
if(WaitForSingleObject(RdStatShared.hMutex, INFINITE) == WAIT_OBJECT_0)
{
if(RdStatShared.Resp.itemLength != NULL)
{
strncpy((char*)TData[53], (char*)RdStatShared.Resp.itemLength, (size_t)0x01);
}
ReleaseMutex(RdStatShared.hMutex);
}
RdStatShared是跨项目使用的共享对象。由于它是随机更新的,我想在读取之前锁定对象。 TData是长度为1024的BYTE类型,itemLength是UCHAR。
在调试代码时,在汇编代码中,我看到将源字符串复制到临时缓冲区时会产生访问冲突。 任何人都可以告诉为什么在strncpy发生访问冲突吗?
感谢任何有用的信息。
拉克希米。
答案 0 :(得分:2)
strncpy
的第二个参数是要复制到的位置,您似乎正在传递RdStatShared.Resp.itemLength
,这听起来像是某种东西的大小,而不是之类的指向字符缓冲区的指针。如果你想解释它,那么你可能需要传递指针,而不是事物本身;即,(char*) &(RdStatShared.Resp.itemLength)
。