strlen()函数是用来计算长度的;
size_t strlen( const char *string );
- #include "stdio.h"
- #include "string.h"
int main(void )
{
char str[30] = "good morning everybody" ; // 22个字符
printf(" str = %s strlen(str) = %d \n",str,strlen(str));
return 0 ;
}

- #include "stdio.h"
- #include "string.h"
int main(void )
{
char str[30] = "good morning \0 everybody" ;
printf(" str = %s strlen(str) = %d \n",str,strlen(str));
return 0 ;
}

测试发现不仅,strlen不计算 \0之后的数据,printf输出也一样,原因就回到数组的问题上了,printf是以%s,字符串的形式输出,遇到字符 ‘\0’ 就认为到达 数组末端了,然后就停止输出了。
#include "stdio.h"
#include "string.h"
int main()
{
char test[50]; // 未初始化
int i = 0;
printf(" test[] = ");
for (; i < 26; i++) {
test[i] = 'A' + i;
printf(" %c ",test[i]);
}
printf("\n stelen(test) = %d \r\n",strlen(test));
return 0 ;
}

可以看到strlen计算出的结果是77,显示是错误的
原因:test字符串在定义时未初始化,test字符串在定义时,拿到一片内存,此时这片内存里面可能储存有值,导致使用strlen计算test字符串时找不到字符串结束标志 ’\0‘,而会在test申请的那片内存后面一直找下去,找到 ’\0‘ 后输出,计算的结果,此时输出的结果肯定错误的结果。
#include "stdio.h"
#include "string.h"
int main()
{
char test[50] = {0}; // 初始化
int i = 0;
printf(" test[] = ");
for (; i < 26; i++) {
test[i] = 'A' + i;
printf(" %c ",test[i]);
}
printf("\n stelen(test) = %d \r\n",strlen(test));
return 0 ;
}

初始化之后的结果就正确了
#include "stdio.h"
#include "string.h"
int main()
{
char a[50] = "123456";
char b[50] = {"123"};
if( strlen(b) - strlen(a) > 0 ){
printf("字符串b 比 字符串a 长 \n");
}else{
printf("字符串a 比 字符串b 长 \n");
}
return 0 ;
}
#include "stdio.h"
int myStrlen(const char* str)
{
int count = 0;
if (str == NULL) {
return -1;
}
while(*str != '\0') // 只要不为 结束字符
{
str++;
count++;
}
return count;
}
int main()
{
char a[50] = "123456";
char b[50] = {"123"};
printf(" myStrlen(a) = %d myStrlen(b) = %d \n\n", myStrlen(a), myStrlen(b));
if( myStrlen(b) - myStrlen(a) > 0 ){
printf("字符串b 比 字符串a 长 \n");
}else{
printf("字符串a 比 字符串b 长 \n");
}
return 0 ;
}