首页 > 解决方案 > strcpy 将结构名称复制到字符数组?

问题描述

我有一个具有名称变量的结构,即:

l->name

我还有一个字符数组:

char highest1[50];

我想复制l->namehighest1[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 信号的东西?

标签: c

解决方案


我在这里做任何违法的事情吗:

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

推荐阅读