此问题已在此处有答案:
How can I correctly assign a new string value?(6个答案)
6天前关闭
我尝试创建一个电话簿struct
,并为数组的元素赋值:
#include <stdio.h>
#include <string.h>
typedef struct
{
char name[30];
char number[30];
}
phonebook_record;
int main(void)
{
phonebook_record people[2];
people[0].name = "my_name";
people[0].number = "+555-000-0000";
}
在赋值阶段弹出错误:
phonebook.c: In function 'main':
phonebook.c:15:20: error: assignment to expression with array type
15 | people[0].name = "my_name";
| ^
phonebook.c:16:22: error: assignment to expression with array type
16 | people[0].number = "+555-000-0000";
| ^
我错过了什么?这是我定义结构的方式吗?包含两个char
s数组?
2条答案
按热度按时间ddrv8njm1#
虽然可以从字符串文字initialize数组,但不能将字符串文字assignment到数组。为此,您必须使用类似
strcpy
的东西。初始化:
将字符串的值(单个字符)复制到数组中:
qjp7pelc2#
在C中,不能直接将值赋给整个数组,除非在初始化期间(即当声明对象时)。下面是一个例子:
如果要在声明对象后更改以空结尾的字符数组的内容,可以为数组的各个元素赋值(即单个字符),或者您可以使用函数
strcpy
一次更改多个字符的内容。下面是一个例子:然而,使用函数
strcpy
可能是危险的,因为如果目标内存缓冲区中没有足够的空间,那么你将有一个buffer overflow。因此,通常使用函数snprintf
会更安全,如下所示:如果字符串太长,函数
snprintf
将截断字符串,而不是溢出目标缓冲区。如果你想检测是否发生了这样的截断,你可以检查snprintf
的返回值。然而,尽管不可能在声明之外为整个数组赋值,但可以为整个
struct
赋值。由于两个char
数组是struct
的成员,因此为struct
赋值将间接为两个数组的整个内容赋值。给struct
赋值的一种方法是给它赋值compound literal的值。下面是一个例子: