首页 > 解决方案 > 中止陷阱:Mac OS 上使用 strncpy 和 strcpy 出现 6 错误

问题描述

任何关于变通/替代的建议表示赞赏。我试图在返回调用函数之前覆盖空值。包括打印报表。

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");

}
value of tmp_buf = 19990101
before OSTMP3 Strncpy 
Abort trap: 6

标签: cstrcpystrncpy

解决方案


strcpy()的手册指定源缓冲区和目标缓冲区不应重叠:

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


推荐阅读