在 C 中为结构数据类型内的数组赋值时出错
Getting error when assigning value to an array inside the struct datatype in C
struct student {
char name[20];
int age;
float mobile;
char address[20];
};
struct student Amit;
Amit.name[20] = "Sachin"; // I have mentioned the size still warning and unexpected result! why?
输出:
$ 海湾合作委员会 try.c
try.c:在函数中'main':
try.c:12:17: 警告:赋值从指针生成整数而不进行强制转换 [-Wint-conversion]
s1.name[20] = "萨钦";
^
$./a.exe
☺
name[20]
是 name
的索引 20 处的 char
(顺便说一句,越界),您正试图为其分配一个字符串。相反,您可以使用 strcpy
:
复制该值
strcpy(Amit.name, "Sachin");
// I have mentioned the size still warning and unexpected result! why?
您没有指定数组的大小。数组的大小在其声明中指定。您已为下标运算符指定索引以访问数组的元素。
表达式
Amit.name[20]
具有 char
类型,而且存在对数组以外的内存的访问,因为数组的索引的有效范围是 [0, 19]
.
另一方面,字符串文字 "Sachin"
用作赋值表达式的表达式的类型为 char *
.
因此编译器发出一条消息。
数组没有赋值运算符。
要么像这样定义结构体类型的对象时需要初始化数组
struct student Amit = { .name = "Sachin" };
或者在定义对象后,你可以像
一样复制数组中的字符串文字
#include <string.h>
//...
struct student Amit;
strcpy( Amit.name, "Sachin" );
struct student {
char name[20];
int age;
float mobile;
char address[20];
};
struct student Amit;
Amit.name[20] = "Sachin"; // I have mentioned the size still warning and unexpected result! why?
输出:
$ 海湾合作委员会 try.c try.c:在函数中'main': try.c:12:17: 警告:赋值从指针生成整数而不进行强制转换 [-Wint-conversion] s1.name[20] = "萨钦"; ^ $./a.exe ☺
name[20]
是 name
的索引 20 处的 char
(顺便说一句,越界),您正试图为其分配一个字符串。相反,您可以使用 strcpy
:
strcpy(Amit.name, "Sachin");
// I have mentioned the size still warning and unexpected result! why?
您没有指定数组的大小。数组的大小在其声明中指定。您已为下标运算符指定索引以访问数组的元素。
表达式
Amit.name[20]
具有 char
类型,而且存在对数组以外的内存的访问,因为数组的索引的有效范围是 [0, 19]
.
另一方面,字符串文字 "Sachin"
用作赋值表达式的表达式的类型为 char *
.
因此编译器发出一条消息。
数组没有赋值运算符。
要么像这样定义结构体类型的对象时需要初始化数组
struct student Amit = { .name = "Sachin" };
或者在定义对象后,你可以像
一样复制数组中的字符串文字#include <string.h>
//...
struct student Amit;
strcpy( Amit.name, "Sachin" );