c - strcpy 将结构名称复制到字符数组?
问题描述
我有一个具有名称变量的结构,即:
l->name
我还有一个字符数组:
char highest1[50];
我想复制l->name
到highest1[50]
,但我不能这样做。
我在这里做违法的事吗?
strcpy(highest1[50], l->name);
runtime error: index 50 out of bounds for type 'char [50]'
我尝试增加char[50]
,char [99]
但后来我得到:
runtime error - illegal array, pointer or other operation
还有关于致命的 ASAN 信号的东西?
解决方案
我在这里做任何违法的事情吗:
strcpy(highest1[50], l->name);
是的,代码在这里做着非法的事情。
highest1[50]
是元素 50 的值,某个整数值,它被视为要复制到的地址。
同样char highest1[50];
,尝试使用 未定义的行为(UB) 查找数组外部的highest1[50]
值。
为了避免这样的基本错误
1) 启用所有编译器警告以节省您的时间。2)以不溢出其大小的方式复制到highest1[]
。
size_t len = strlen(l->name);
if (len >= sizeof highest1) Handle_Error();
else {
strcpy(highest1, l->name);
}
推荐阅读
- php - 如何使用碳将年改为月?
- android - 使用 AudioRecord.read 并始终获取最大振幅的缓冲区
- asp.net-mvc - BeginForm 的甜蜜警报
- android - 如何在两个TextViews之间画一条线
- django - cookiecutter-django docker-compose -f production.yml 挂起
- javascript - Material2 Datepicker - 将日期转换为没有时间的时间戳
- sql - 如何将两个查询合二为一
- java - Netbeans 中的文件类型中缺少从 wsdl 创建 Web 服务
- python - pandas group by 删除异常值
- c# - 从 XML 文档 C# 获取正确值的问题