strlen ()是一个函数,用来求字符串的长度,其值在运行时才能确定
strlen() 函数从字符串的开头位置依次向后计数,直到遇见\0,然后返回计时器的值。最终统计的字符串长度不包括\0
sizeof()是一个运算符,其值在编译的时候就已经确定了,可以获得数据类型或变量在内存中所占的字节数
举几个例子说明下:
#include <stdio.h>
#include <string.h>
int main()
{
char str[20] = "string";
printf("%ld,%ld\n", strlen(str), sizeof(str));
}
输出结果为:6,20
字符串的末尾有个结束标志\0,strlen()会统计\0之前的字符,所以strlen(str)结果为6
初始化的时候就已经确定数组str的长度为20,所以sizeof(str)结果为20
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = "string";
printf("%ld,%ld\n", strlen(str), sizeof(str));
}
输出结果为:6,7
字符串的末尾有个结束标志\0,strlen()会统计\0之前的字符,所以strlen(str)结果为6
数组str的长度没有确定,字符串后面有一个结束标志\0,所以sizeof(str)结果为7
#include <stdio.h>
#include <string.h>
int main()
{
char str[20] = {'s', 't', 'r', 'i', 'n', 'g', '\0'};
printf("%ld,%ld\n", strlen(str), sizeof(str));
}
输出结果为:6,20
最后一个字符是\0,strlen()只统计\0之前的字符,所以strlen(str)的结果为6
初始化的时候就已经确定数组str的长度为20,所以sizeof(str)结果为20
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = {'s', 't', 'r', 'i', 'n', 'g', '\0'};
printf("%ld,%ld\n", strlen(str), sizeof(str));
}
输出结果为:6,7
最后一个字符是\0,strlen()只统计\0之前的字符,所以strlen(str)的结果为6
数组str的长度没有确定,后面有一个结束标志\0,所以sizeof(str)结果为7
#include <stdio.h>
#include <string.h>
int main()
{
char str[20] = {'s', 't', 'r', 'i', 'n', 'g'};
printf("%ld,%ld\n", strlen(str), sizeof(str));
}
输出结果为:6,20
分析同上
#include <stdio.h>
#include <string.h>
int main()
{
char str[] = {'s', 't', 'r','\0', 'i', 'n', 'g'};
printf("%ld,%ld\n", strlen(str), sizeof(str));
}
输出结果为:3,7
中间一个字符是\0,strlen()只统计\0之前的字符,所以strlen(str)的结果为3
#include <stdio.h>
#include <string.h>
int main()
{
char str[20] = {'s', 't', 'r','\0', 'i', 'n', 'g'};
printf("%ld,%ld\n", strlen(str), sizeof(str));
}
输出结果为:3,20
分析同上
当然了,求数组的长度,使用sizeof的时候,应该是length=sizeof(str)/sizeof(char)
因为我的数组都是使用的char,sizeof(char)等于1,所以就省略不写了