c - 中止陷阱: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()的手册指定源缓冲区和目标缓冲区不应重叠:
strcpy() 函数将 src 指向的字符串,包括终止的空字节 ('\0') 复制到 dest 指向的缓冲区。字符串不能重叠,并且目标字符串 dest 必须足够大以接收副本。小心缓冲区溢出!(见错误。)
推荐阅读
- angular - 如何使用 formcontrol 在选择框内添加占位符?
- tensorflow - Where are the images read in this classification python program?
- linux - bash中不同脚本的不同功能
- android - 在 AsyncTask InputStream 中得到 android.os.NetworkOnMainThreadException
- android - Android 应用内更新返回缓存的应用更新信息
- c# - 如何刷新 Google OAuth2 AccessToken
- php - 存储查询结果以供以后在会话或临时表中使用或一一查询?
- ibm-mobilefirst - JSON 日期属性在存储到 JSONStore 后被解析为本地时区
- android - 如何更新当前不在屏幕上焦点的回收器视图的特定位置的视图?
- informix - Informix 今日运算符