char[]数组该如何赋值知道

哎呀,我以前确实遇到过这个麻烦。
记得去年的一个项目中,我直接使用字符串文字给char数组赋值,结果程序崩溃了。
我当时用的C语言,数组定义是char a[1 0],所以我就想当然的写了a[1 0] = "hello";。
你猜怎么着? 编译器直接给了我一个错误信息。
查了资料后发现我做不到这一点。
您必须先定义数组,然后使用字符串文字来赋值,例如 strcpy(a, "hello");。
你看,我当时真是太傻了。

还有一次,在嵌入式系统中,我需要将字符串复制到数组中。
当时数组大小为 char b[2 0]; 字符串是“TechWorld”。
我直接使用了 strcpy(b, "TechWorld"); 发现字符串长度加上终止符\0超出了数组大小。
那天调试了半天,才想起数组大小中的\0应该保留一个字符。
所以,定义数组时,长度必须比字符串的长度多1
至于逐字符赋值,我经常用这个。
比如char c[5 ] = {'H', 'e', 'l', 'l', 'o'};,直接初始化就可以了。
简单明了,不容易出错。
不过这种方法适用于字符比较少的情况。
如果字符太多,一一写起来会很烦人。

总之,给char数组赋值时,一定要注意数组大小和字符串长度,否则很容易出问题。
以前的我就是这样,踩过很多坑,现在我终于明白这些坑是从哪里来的了。

C语言中如何一次给一个数组变量赋值

请教Delphi高手:如何将字符数组初始化

嗯,字符数组初始化需要更具体。

正如你所说,一次直接初始化一个是非常直观的。
例如,在2 02 2 年,当我写代码时,我可能会这样写: char str[1 0] = {'I', ' ', 'a', 'm', ' ', 'h', 'a', 'p', 'p', 'y'}; 您可以看到此处每个位置列出了哪些符号。
我只给出了来自 1 0 个地点的 1 0 个角色,对吗?对于剩下的几个,编译器会自动分配给我'\0',这是一个空字符。
这个'\0'很重要,它表示行尾。

字符太多怎么办?假设我正在做一个项目,不小心写了: char str[5 ] = {'H', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'}; 这会导致问题,编译器会抛出语法错误,因为不可能将 1 0 个字符塞进只能容纳 5 个的数组中。
所以我记得花了很长时间进行调试并意识到已经超出了字符数。

还有另一种方法 - 使用字符串常量。
它更有用。
例如,在 2 02 2 年我可能会写: char str[] = "我很高兴"; 或者直接: char str[] = "我很高兴"; 在这两种记录方法中,编译器都会根据字符串的长度自动为数组分配足够的空间。
编译器会在字符串常量后面添加“\0”。
所以str的长度实际上是1 1 个“我很高兴”字符,包括最后一个“\0”。

但是,这个通用目的只能在初始化期间使用。
你不能做这样的事情: 符号st[1 5 ]; str = "我很高兴"; // 这是错误的! 后来我明白了为什么我错了。
声明字符数组str时,不需要指定长度。
编译器会根据初始化的字符串常量的长度来确定。
但是,一旦创建了数组,它的内存空间就固定了,您不能使用字符串常量来重新调整整个数组的用途。
您需要逐个字符地赋值,例如: 字符 st[1 5 ]; str[0] = '我'; str[1 ] = ' '; str[2 ] = 'a'; str[3 ] = 'm';字符串[4 ] = ''; ... 这是正确的。
也许我有点极端,认为这使用起来太麻烦,但这就是规则。

无论如何,字符数组的初始化要根据情况而定。
一一赋值,实现精准控制;使用字符串常量方便快捷,但注意它们只能在初始化期间使用。