strlen的有关问题 想不明白

strlen的问题 想不明白
// 测量字符串变量的字符长度
    char s[] = "lmj";
    //printf("%d\n", strlen(s));
    
    char s1[] = {'m', 'j'};
    printf("%d\n", strlen(s1));

打印结果是5 我不明白 不是2吗?

------解决方案--------------------
strlen 是计算字符串的长度.
知道什么是字符串吗? 以 '\0' 结尾的在 C 语言里才叫字符串.
对于不是字符串的, 用 strlen 函数的结果是未定义, 可以返回任何值, 可以直接让程序崩溃掉.
------解决方案--------------------
strlen它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止


------解决方案--------------------
一般情况下 char s[] = "lmj";基本等价于 char s[] = {'l', 'm', 'j', 0}; 主意这是四个元素。sizeof(s)是4而不是3。
------解决方案--------------------
strlen函数是求字符串的长度,直到遇到'\0'才结束。
 char s1[] = {'m', 'j'};数组中没有'\0',所以求他的长度的结果是未定义的
------解决方案--------------------
strlen用于输出字符串的长度,虽然数组可以当做字符串来理解,但是,数组和字符串还是有区别的,编译器会在字符串的末尾自动加上"\0",而数组则不会,所以……用strlen只有在碰到"\0"时才停止,这个长度可能是任意值。这里你可以用sizeof()试试
------解决方案--------------------
计算机组成原理→DOS命令→汇编语言→C语言(不包括C++)、代码书写规范→数据结构、编译原理、操作系统→计算机网络、数据库原理、正则表达式→其它语言(包括C++)、架构……

对学习编程者的忠告:
眼过千遍不如手过一遍!
书看千行不如手敲一行!
手敲千行不如单步一行!
单步源代码千行不如单步对应汇编一行!

VC调试时按Alt+8、Alt+7、Alt+6和Alt+5,打开汇编窗口、堆栈窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应堆栈、内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。

------解决方案--------------------
strlen是要以'\0'字符来判定字符串结束的。。而你这个数组中没有'\0'。。它只好一直往后边找,找到'\0'为止。。结果是未定义的。。你这里得到5只是碰巧而已。。
------解决方案--------------------
用到strlen的地方必须是字符串,不是字符数组,要求数组大小,可以用sizeof
------解决方案--------------------
楼主不要奇怪是5,有可能是任何数,我在VC6上显示是7。
因为第二次根本就没有结束符。。。就是说没有以\0,结束。

#include<stdio.h>
#include<string.h>

int main()
{
// 测量字符串变量的字符长度
    char s[] = "lmj";
    //printf("%d\n", strlen(s));
     
    char s1[] = {'m', 'j'};
    //char s1[] = {'m', 'j', '\0'};这样才可以正常。
    printf("%d\n", strlen(s1));
return 0;
}

------解决方案--------------------
对于strlen楼上各位已经解释很详细了,它开始从字符串开始计数,直到结尾出现'\0'字符。
char s[] = "lmj"; // 这里的s是字符串,自动以'\0'结尾,连续存储着'l','m','j','\0'四个字符。
char s1[] = {'m', 'j'}; // 这里的s1是字符数组,只连续存储着'm','j'两个字符。

在计算strlen(s1)得到5的一种可能解释就是:因为这两个局部变量都依次存储在内存栈中,先s,后s1,,且连续,这是内存栈中的数据就是 'm','j','l','m','j','\0',这时候strlen得到就是5了,可以尝试将s多加一个字符,char s[] = "lmja", 看看strlen是否会变成6。