您当前的位置: 首页 > 慢生活 > 程序人生 网站首页程序人生
c语言-结构体char直接赋值问题
发布时间:2021-04-15 20:49:51编辑:雪饮阅读()
关于结构体,这个其实就相当于java中的泛型,其实这样说呢也不是很精确的。
说是像php中的stdclass,好像也是这么回事情。
那么一个常见的结构体一般如:
#include <stdio.h>
#include <string.h>
struct Books
{
char title[50];
char author[50];
char subject[100];
int book_id;
};
int main( )
{
struct Books Book1; /* 声明 Book1,类型为 Books */
struct Books Book2; /* 声明 Book2,类型为 Books */
/* Book1 详述 */
strcpy( Book1.title, "C Programming");
strcpy( Book1.author, "Nuha Ali");
strcpy( Book1.subject, "C Programming Tutorial");
Book1.book_id = 6495407;
/* Book2 详述 */
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Zara Ali");
strcpy( Book2.subject, "Telecom Billing Tutorial");
Book2.book_id = 6495700;
/* 输出 Book1 信息 */
printf( "Book 1 title : %s\n", Book1.title);
printf( "Book 1 author : %s\n", Book1.author);
printf( "Book 1 subject : %s\n", Book1.subject);
printf( "Book 1 book_id : %d\n", Book1.book_id);
/* 输出 Book2 信息 */
printf( "Book 2 title : %s\n", Book2.title);
printf( "Book 2 author : %s\n", Book2.author);
printf( "Book 2 subject : %s\n", Book2.subject);
printf( "Book 2 book_id : %d\n", Book2.book_id);
return 0;
}
那么今天的重点是在于结构体中的成员为什么是int型就可以直接赋值,例如这里book_id就可以直接使用Book2.book_id = 6495700;这种方式赋值,而char型字符数组就不可以呢?
那么下面是我综合了网上的一些资料以及我个人的看法整理出来的:
结构体中char类型成员变量即便是字符数组,如这里的title[50]
也是不能直接给他赋值一个字符串的,如Book1.title='asdasd';这种操作就会导致编译出错
因为就算不是结构体,只要是一个普通的字符数组,也只能第一次被完整赋值(初始化),第二次就只能去修改该字符数组中某个索引下的元素(字符)了
比如正常的一字符串的定义与输出:
char s[10]="abcde";
printf("%s\n",s);
这样是没有问题的
但是如果修改为:
char s[10]="abcde";
s="dddd";
printf("%s\n",s);
这样就会编译失败
char s[10]="abcde";
s[0]='h';
s[1]='e';
s[2]='l';
s[3]='l';
printf("%s\n",s);
这样就是没有问题了
所以这里结构体的char成员是字符数组的时候也不能直接赋值,但是有个问题就是这个成员变量还没有被初始化,同样不能被赋值
这里是个人看法,我觉得应该是结构体内部初始化了char字符数组类型的默认值了
关键字词:c语言,结构体,char,字符数组,直接赋值