【问题标题】:memcpy_s and strcpy_s error but manual for loop worksmemcpy_s 和 strcpy_s 错误,但手动 for 循环有效
【发布时间】:2012-04-28 20:05:11
【问题描述】:

在我的示例中,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,":",&amp;next_token); 调用中获得的。

我很困惑:)

【问题讨论】:

  • 标准库函数工作正常吗?
  • 你有一个Obi-Wan
  • 从抛出错误的代码中,您的目标指针似乎以某种方式变为空,您会检查它吗?

标签: c visual-studio-2010 memcpy strcpy


【解决方案1】:

memcpy_s 如果源不适合目标,则会引发异常。 sizeof(char) 是 1。两者都验证指针不是 NULL,所以你必须有一个。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-04-21
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 2012-01-03
      • 2017-01-03
      • 1970-01-01
      • 2016-08-15
      相关资源
      最近更新 更多