C-字符串要点

  • 字符串是工作中常见的数据结构,但C语言并无单独的字符串数据类型,只能通过数组类型进行模拟,其本质就是字符数组且最后一个元素为字符串结束符(数字0或’\0’)
  1. 字符串结尾符问题
char s[10]={'h','e','l','l','o'};
printf("%s",s);//hello 不会乱码 因为如果数组未满,后面元素默认为数字0刚好是字符串结尾符
char s[]={'h','e','l','l','o'};
printf("%s",s);//发生乱码 没有结尾符
char s[]={'h','e','l','l',0,"!"};
printf("%s",s);//hell
char s[]={'h','e','l','l','0','!'};
printf("%s",s);//发生乱码 没有结尾符'0' 不是结尾符 
char s[]={'h','e','l','l','\0','!'};
printf("%s",s);//hell '\0为结尾符'
  1. 结尾符转义冲突问题
char s[]="\01245";由于\012为\n 表现为换行45
  1. sizeof strlen区别
sizeof 计算字符串包含结束符(0或\0)
strlen  不包含结束符
char str[]="12345";
sizeof(str) //6
strlen(str) //5
  1. 数组法或指针法操作字符串
char str[]="hello";
int len=strlen(str);
char *p=str;
for(int i=0;i

为什么数组为常量不能修改其指针地址
答: 为了精确的回收数组内存,如果数组的首元素地址变化了势必无法回收完全本应回收的内存空间还会破坏不该回收的内存空间

  1. 字符串拷贝函数是实现
void my_strcpy(char*src,char*dst){
	char *srcT=src;
	char *dstT=dst;
	while(*srcT!=0){
		*dstT=*srcT;
		dstT++;
		srcT++;
	}
	//while(*dstT++=*srcT++){};以上while的精简写法
	//由于++和*优先级平级所以从右向左进行
	//*dstT=srcT;
	//dstT++ srcT++
	//判断dst是否为0 否者就结束
	*dstT=0;
}
int main(int arg,char *argu[]){
	
	char src[]="hello";
	char dst[100]="";
	my_strcpy(src,dst);
	printf("%s",dst);
	system("pause");
}

你可能感兴趣的:(#,C/C++)