sizeof是一个关键字而不是函数,求出传入的操作数所占的字节数; strlen是的一个库函数,求字符串长度; sizeof传入字符串时,要一直找到字符串末尾,包括\0在内; strlen遇到第一个\0为止,不算\0在内; sizeof可以计算各种类型的字节数:各种内置类型,指针等; strlen必须传入char* 二者都用于字符串时,容易混淆;毕竟只有sizeof可用于其他各种类型,而strlen只能用于字符串; 字符串由多种表示:
char * p = "lixu" ;
char a [ ] = "lixu" ;
char b [ ] = { 'l' , 'i' , 'x' , 'u' } ;
char str[ 100 ] = "abcde" ;
printf ( "sizeof(str) = %lu\n" , sizeof ( str) ) ;
char str1[ ] = "abcde" ;
printf ( "sizeof(str1) = %lu\n" , sizeof ( str1) ) ;
char str2[ ] = "\0abcde" ;
printf ( "sizeof(str2) = %lu\n" , sizeof ( str2) ) ;
char str3[ ] = "\0ab\0c de" ;
printf ( "sizeof(str3) = %lu\n" , sizeof ( str3) ) ;
char str4[ 6 ] = "abcde" ;
printf ( "strlen(str4) = %lu\n" , strlen ( str4) ) ;
char str5[ 100 ] = "abcde" ;
printf ( "strlen(str5) = %lu\n" , strlen ( str5) ) ;
char str6[ ] = "\0abcde" ;
printf ( "strlen(str6) = %lu\n" , strlen ( str6) ) ;
char str7[ ] = "ab cde" ;
printf ( "strlen(str7) = %lu\n" , strlen ( str7) ) ;
char * p = "hello" ;
char arr1 [ ] = "hello" ;
char arr2[ ] = { 'h' , 'e' , 'l' , 'l' , 'o' } ;
printf ( "%d\n" , sizeof ( p) ) ;
printf ( "%d\n" , sizeof ( arr1) ) ;
printf ( "%d\n" , sizeof ( arr2) ) ;
printf ( "%d\n" , strlen ( p) ) ;
printf ( "%d\n" , strlen ( arr1) ) ;
printf ( "%d\n" , strlen ( arr2) ) ;