strcpy将struct name复制到char数组?

时间:2018-06-01 03:27:31

标签: c

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

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信号?

3 个答案:

答案 0 :(得分:2)

  

我在这里做了什么非法行为:

strcpy(highest1[50], l->name);

是的,代码在这里做了非法的事情。

highest1[50]是元素50的值,某个整数值,并且被视为要复制到的位置的地址。

同样使用char highest1[50];,尝试使用highest1[50]查找数组外部的值是未定义的行为(UB)。

避免这种基本错误

1)启用所有编译器警告以节省您的时间。 2)以不超出其大小的方式复制到highest1[]

size_t len = strlen(l->name);
if (len >= sizeof highest1) Handle_Error();
else {
  strcpy(highest1, l->name);
}

答案 1 :(得分:1)

  

我在这里做了什么非法行为:

是的:两件事

  1. highest1的有效索引为0到49。
  2. 您想要strcpy(highest1, l->name),因为highest1[0]是一个字符,不是指向一个字符。

答案 2 :(得分:0)

highest1[50]highest的51个元素,因此您将基本上错误的地址传递给strcpy,该地址将两个char指针作为输入。

您应该调用strcpy(highest1, l->name),因为数组的名称是第一个元素的地址位置。

另请注意,如果您有一串4个字符,请参阅。 “aaaa”然后数组应该有5个元素来包含终止字符'\ 0'。