“字符串的结束标志是‘\0‘,编译器自动在字符串末尾添加”

“字符串的结束标志是’\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';

猜你喜欢

转载自blog.csdn.net/qq_39378657/article/details/109137387