如何解决中止陷阱: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
解决方法
strcpy() 的 manual 指定源缓冲区和目标缓冲区不应重叠:
strcpy() 函数将 src 指向的字符串,包括终止空字节 ('\0') 复制到 dest 指向的缓冲区。字符串不能重叠,并且目标字符串 dest 必须足够大以接收副本。小心缓冲区溢出! (请参阅错误。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。