字符串与字符数组的区分

请看下面举例代码: 

#include<stdio.h>
int main (){
	char a[5]={'C','h','i','n','a'};//用 a[5]="China" 时,报错,说字符串太长了
	char b[5];
	for(int i=0;i<5;i++){
		b[i]=a[i]+4;
	}
	printf("%s",b);
return 0;
}

上面的问题显然涉及到  字符串  与   字符数组 的区分问题

        下面从我的角度(当然不一定正规,可能是错误的,如有错误也希望您来指正,共同进步)去解释:


        字符串:

  •         在C语言中,被解释为一个  以空字符 \0 结尾的字符数组,例如,当你声明一个字符串字面量如"Hello"时,它在内存中实际上是一个包含字符Hello和一个结束符\0的字符数组。
  •         字符串常量可以直接赋值给字符数组,如char str[] = "Hello";,编译器会自动为字符串添加\0
  •         字符串可以使用标准库中的字符串处理函数,如strlen()strcpy()strcmp()等,这些函数都依赖于\0来判断字符串的结束

        字符数组:

  •         字符数组是一个元素类型为char的一维数组,它可以用来存储任何字符数据,不仅仅是构成字符串。
  •         如果用来存储字符串,需要手动添加或由特定操作(如初始化时使用字符串字面量)加入\0来标记字符串的结束。
  •         字符数组的大小固定,可以在声明时指定,也可以动态分配内存,但一旦分配,数组的容量不会改变。
  •        不一定非要用来存储字符串,也可以存储任意字符序列,比如二进制数据、字符编码等,无需以\0结尾

总结:

        他俩的主要区别在于 字符串特指以\0结尾的字符数组,而字符数组更广泛,它可以包含任何字符序列,是否以\0结尾取决于具体用途。


 这是最常见的定义字符串的方式,数组中最后一个字符必须是空字符\0,表示字符串的结束。

char str1[10] = "Hello"; // 注意:数组长度为10,但字符串"Hello"连同结束符'\0'共占6个位置,其余4个位置未使用。
char str2[] = "World"; // 编译器会自动计算字符串长度(包括'\0')并分配相应大小的数组空间。

这种方式实际上是让指针指向一个字符串常量,这个字符串常量通常存储在只读内存区域,因此不能修改

char *str3 = "Example"; // str3是一个指向字符串常量的指针,内容不能被修改。

当然 还有动态定义字符串:

char *str4;
str4 = (char*)malloc(10 * sizeof(char)); // 分配空间,不包括'\0'
strcpy(str4, "Dynamically"); // 使用strcpy复制字符串到分配的内存,需要包含<string.h>
// 记得在不再使用时释放内存 free(str4);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值