C语言如何为结构体中的某个属性赋值

#define StrLen 81
typedef struct {
int len;
char ch[StrLen];
}String;
定义了一个String结构体,其中有一个字符数组长度是81,在代码里赋值的时候就必须要给一个81的数组吗?s1.ch="this";这样报错,cannot convert from 'char [6]' to 'char [81]'我想赋一个这样的值要怎样写?
求教

C语言中,数组间不能相互赋值——这是历史遗留问题,当年在B语言中,数组名和指针名是没有区别的(除了数组名定义时自动为数组分配内存),数组名可以指向别的对象或数组。换句话说,数组名之间的赋值是浅赋值。后来C语言的设计者发现这种规则在C语言行不通,但是C语言的设计者又不想破坏对B语言的兼容性,于是就干脆禁止了数组间的赋值(这样B语言程序员在C语言中尝试“数组间浅赋值”的时候就会得到明确的报错)。后来B语言退出历史舞台,而C语言的这种设计却一直保留下来,遗臭万年……

字符数组间的赋值需要用 strcpy 或(如果知道数组长度) memcpy。在这个例子中strcpy(s1.ch,"this");是标准做法。不用担心性能损失,现代编译器都把 strcpy 作为内置过程,可以保证和汇编一样高效(甚至更高效)
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-28
strcpy(String.ch,"this");追问

有正常的赋值方法吗?赋个值还要作用函数吗

追答

其实还有一种,直接使用char指针进行赋值,还有就是,你这个赋值不成功的问题主要是因为字符数组在除初始化可以一次性赋值以外的地方都不可以赋值,而不是楼上讲的数组之间不能直接赋值(虽然说也的确不能但是这个问题不是这个原因)

比如说

char a[80]="awdsa";

这样可以,但是

char a[80];
a="awdas";

这样就不可以了,你这个就是属于这种问题

但是你可以这样

char a[80];
char* b=a;
b="Adasdw";

用指针对字符数组进行赋值

也就是说你的问题可以这样:

char* give=s1.ch;
give="this";

昨天因为没时间就给了一个最简单的函数

所以今天补上

不采纳给个赞也行

对你有帮助就好

相似回答