memcpy_s和strcpy_s错误但循环手动工作

时间:2012-04-17 13:13:31

标签: c visual-studio-2010 memcpy strcpy

在我的示例中,strcpy_s和malloc_s抛出错误,而手动复制似乎有效。这是代码。这有效:

hookaddrinfoluacode=(char *)malloc(16384);
// This works           
for(i=0;i<strlen(this_token);++i){
   hookaddrinfoluacode[i]=this_token[i];
}                       
hookaddrinfoluacode[i+1]='\0';

这不是

memcpy_s(hookaddrinfoluacode,sizeof(char),this_token,strlen(this_token));

这两点都没有:

strcpy_s(hookaddrinfoluacode,strlen(this_token),this_token);

错误似乎是从标准库中的代码行抛出的:

 _VALIDATE_RETURN_ERRCODE(dst != NULL, EINVAL);

this_token来自this_token=strtok_s(NULL,":",&next_token);来电。

我很困惑:)

2 个答案:

答案 0 :(得分:2)

如果源不适合目标,

memcpy_s会抛出异常。 sizeof(char)是1.两者都验证指针不是NULL,所以你必须有一个。

答案 1 :(得分:0)

您看到的错误似乎是验证收到的目标指针不是null。你在使用它之前分配它吗?如你所示,你正在手动做?除此之外,您应该将目标缓冲区的大小作为第二个参数,并在第四个参数中指定要复制的字节数。它应该是这样的:

hookaddrinfoluacode=(char *)malloc(16384);
memcpy_s(hookaddrinfoluacode, 16384 * sizeof(char),this_token,strlen(this_token) );