strlen和sizeof,const char *、char * const 和char []区别
strlen和sizeof
-
strlen是函数,返回字符串的长度(不计’\0’),而sizeof是运算符,返回变量或类型的大小(字节数)。
-
strlen在运行时计算,遍历字符直到’\0’,而sizeof在编译时确定。
-
对于字符数组,sizeof包括所有元素,包括’\0’(如果有的话),而strlen不包括。
-
当用于指针时,sizeof返回指针的大小,而strlen仍然计算指向的字符串长度。
-
如果没有正确的’\0’终止,strlen可能出错,而sizeof不受影响,只要数组定义正确。
const char *、char * const 和char []
1指向常量的指针
const char * ptr中的const修饰的是char,ptr指向的是一个常量字符,不能通过ptr来修改所指向的内容,但ptr本身可以指向其他地址。
const char *ptr = "Hello";ptr = "World"; // 允许,改变指针的指向// ptr[0] = 'h'; // 不允许,编译错误,因为指向的内容是常量
2常量指针
char * const ptr中的const修饰指针ptr,表示ptr本身是一个常量,不能指向其他地址,但可以通过ptr修改所指向的内容。
char str[] = "Hello";char* const ptr = str;ptr[0] = 'h'; // 允许,修改指向的内容// ptr = "World"; // 不允许,编译错误,指针本身是常量
3指向常量字符的常量指针
const char* const ptr = "Hello";
指针不可重新指向其他地址。
指向的内容也不可修改。
4char buf[1024]
数组(固定大小的字符缓冲区)