“字符串的结束标志是’\0’,编译器自动在字符串末尾添加”
探究:“字符串的结束标志是’\0’,编译器自动在字符串末尾添加”
编译器:编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序
int main()
{
// 1. 申请地址
// 调用malloc分配空间,malloc的返回值是该地址块的首地址或者NULL(当申请失败时为NULL)
char *brr = malloc(3*sizeof(char));
// 2. 未初始化值时(指的是没有赋一个值时,'\0'在地址块末尾),来看一下这段未初始化的地址块的结束标志是不是'\0'
while(*brr!='\0'){
printf("hello\n");
brr++;
}
}
结果:输出三次hello
,说明未初始化时,’\0’在地址块的末尾作为结束标志。
int main()
{
// 1. 申请地址
// 调用malloc分配空间,malloc的返回值是该地址块的首地址或者NULL(当申请失败时为NULL)
char *brr = malloc(3*sizeof(char));
// 2. 声明一个 res 指向 brr
char *res = brr;
// 1次
*brr='a';
// 2次
brr++;
*brr='b';
//(我赋值两次。记住哦:使用的空间不要超过申请的地址块的大小)
// 3. 初始化值后,来看一下这段地址块的结束标志在哪
while(*res != '\0'){
printf("%c\n",*res);
res++;
}
}
结果:同样是输出三次,没赋值的第三个地址出现了随机值,说明即使初始化了,’\0’也在地址块的末尾作为结束标志。
结论:’\0’只会在申请空间时加在地址块末尾
此时,如果有必要,手动赋值’\0’作为字符串的结束标志,如下:
// 3次
brr++;
*brr='\0';