C语言之字符数组和字符串末尾加‘\0‘情况浅述

在字符数组中,以字符串形式存入,机器会自动加上'\0;

在字符数组中,以字符形式存入,机器不会自动加上'\0'

在字符串中,效果一样

在C语言中:const char * 代表着字符串

#include 
#include 
int main(int argc, char *argv[])
{
    //以字符串形式存入,机器会自动加上'\0'
    char buf1[] = {"hello"};
    //以字符形式存入,机器不会自动加上'\0'
    char buf2[] = {'h','e','l','l','o'};
    //由于数组元素小于定义的空间,所以后面自动补上 '\0'
    char buf3[10] = {'h','e','l','l','o'};
    //为了验证这里写成了 const char [],常规写法不建议
    const char buf4[] = "hello";
    //改成const char *会发生段错误,不允许这样写,类型不匹配
    const char buf5[] = {'h','e','l','l','o'};


    printf("buf1:%ld\n",strlen(buf1));
    printf("buf1:%ld\n",sizeof(buf1));
    //因为strlen没找到'\0',就会一直找下去,直到找到'\0'为止,属于非法访问内存
    printf("buf2:%ld\n",strlen(buf2));
    printf("buf2:%ld\n",sizeof(buf2));
    printf("buf3:%ld\n",strlen(buf3));
    printf("buf3:%ld\n",sizeof(buf3));
    printf("buf4:%ld\n",strlen(buf4));
    printf("buf4:%ld\n",sizeof(buf4));
    printf("buf5:%ld\n",strlen(buf5));
    printf("buf5:%ld\n",sizeof(buf5));
    return 0;
} 
buf1:5
buf1:6
buf2:15
buf2:5
buf3:5
buf3:10
buf4:5
buf4:6
buf5:10
buf5:5

你可能感兴趣的:(C语言,c语言)