c - 将 char* 复制到 char
问题描述
我想将变量类型 char* 复制到变量类型 char 中。调试时,我发生了一个错误:使用命令 strcpy."发生异常"。
如何更改 strcpy 的声明?请有任何建议。
typedef struct
{
int loadId; ///< ID de la charge
long version; ///< Version de l'objet
char loadCustomerId[CL_DSP_ID_LOCATION+1];
}DSP_Load;
DSP_Load donneesLoad;
char *loadCustomerID = (char*)json_string_value(obj);
strcpy(donneesLoad.loadCustomerId, loadCustomerID);
解决方案
该strcpy
函数仅在源字符串中遇到空字符时停止复制。这意味着如果源字符串大于目标数组,您将发生缓冲区溢出并调用未定义行为。
更安全的版本是strncpy
. 如果使用了所有位置,它可能不会终止目标字符串。在这里你可以这样做:
strncpy(donneesLoad.loadCustomerId, loadCustomerID, CL_DSP_ID_LOCATION); // prevent buffer overflow
donneesLoad.loadCustomerId[CL_DSP_ID_LOCATION] = '\0'; // ensure a terminating null
推荐阅读
- r - R:不包含在 HTML 中的 Webscraping 数据
- c# - 在 WebBrowser 控件中获取 HTML CheckBox 状态
- reactjs - 为什么我的模式没有出现在 react native iOS 中。但它在反应原生android中工作
- python - 在每个 URL 中创建一个新的 todolist 实例
- angular - TypeError: Jest: 转换必须导出一个 `process` 函数
- c# - C# - 通用事件处理程序,用于移动在运行时使用鼠标创建的图片框
- c - C中的算术异常
- python-3.x - 在每个项目的 PyCharm 中设置 PYTHONPATH
- mysql - 加入 3 个表并仅根据最新值获取记录
- jquery - $('.selectpicker').selectpicker('refresh'); 标题不起作用