字符串的定义:
①和整型一样:int data = [1,2,3,4,5];
②和整型数组一样:char str[ ]={'h','e','l','l','o'};
③改进:char str[ ]="hello";
④一般用char *p = "hello"
③和④的区别:③是字符串变量,数组中的元素是可以修改的;④是字符串常量,不允许被修改。注意指针的操作,对于普通的字符串常量可以定义一个指针,指向字符串常量的地址空间,野指针没有明确的内存指向,可能会影响到其他内存空间的问题,进行操作时会出现问题。
字符串的存储方式:
当我们使用字符串数组时,发现输出字符数组大小时,与实际的字符串大小不一致,例如当我们定义一个字符串长度为5的数组时,整型为5,字符串型为6,这是因为字符串结束的标准为\0,如果字符数组定义时用的是字符串形式,会自动加上\0。
#include <stdio.h>
int main(){
int data[] = {1,2,3,4,5};
char cdata[] = "hello"; //结束标志为\0
int len = sizeof(data)/sizeof(data[0]);
printf("len = %d\n",len);
len = sizeof(cdata)/sizeof(cdata[0]);
printf("len = %d\n",len);
return 0;
}
输出结果:
len = 5
len = 6
sizeof和strlen的区别:
字符串数组与整型数组类似,当数组足够大,并且有元素没有赋值,会自动的将未赋值的数据初始化为“\0”。
sizeof的作用是计算数组中所有的元素;strlen计算的是有效的字符长度。
char型1个字节、指针为8个字节……
#include <stdio.h>
int main(){
char cdata[128] = "hello";
printf("sizeof:%d\n",sizeof(cdata));
printf("strlen:%d\n"strlen(cdata));
return 0;
}
结果:
sizeof:128
strlen:5