中止陷阱:在使用strncpy和strcpy的Mac OS上出现6个错误

中止陷阱:在使用strncpy和strcpy的Mac OS上出现6个错误,c,strcpy,strncpy,C,Strcpy,Strncpy,如对解决方案/备选方案有任何建议,我们将不胜感激。我试图在返回调用函数之前覆盖空值。包括打印报表 else if (DB_SPC.option == OSTMP3) { /* overwrite nulls */ printf("\n value of tmp_buf = %s\n", tmp_buf); printf("\n before OSTMP3

如对解决方案/备选方案有任何建议,我们将不胜感激。我试图在返回调用函数之前覆盖空值。包括打印报表

else if (DB_SPC.option == OSTMP3)
{                                  /* overwrite nulls                  */

  printf("\n value of tmp_buf = %s\n", tmp_buf);

  printf("\n before OSTMP3 Strncpy \n");

  strncpy(tmp_buf+8,tmp_buf+9,6);

  printf("\n after OSTMP3 Strncpy and before strcpy \n");

  strcpy(tmp_buf+14,tmp_buf+16);

  printf("\n after OSTMP3 strcpy \n");

}
tmp_buf的值=19990101 在OSTM3 Strncpy之前 中止陷阱:6 strcpy()的函数指定源缓冲区和目标缓冲区不应重叠:

函数的作用是:将src指向的字符串(包括终止的空字节('\0')复制到dest指向的缓冲区。字符串不能重叠,目标字符串dest必须足够大才能接收副本。小心缓冲区溢出!(见错误。)


tmp\u buf
是如何声明的?可能的dup和修复方法可能是使用
memmove()
,这保证对重叠副本有效。memove工作起来很有魅力。谢谢