Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ```c
- #include <stdio.h>
- #include <string.h>
- int main()
- {
- char * ptr = "123456789";
- printf("strlen_ptr: %lu\n", strlen(ptr));
- printf("sizeof_ptr: %lu\n", sizeof(ptr));
- char arr[20] = "123456789";
- printf("strlen_arr: %lu\n", strlen(arr));
- printf("sizeof_arr: %lu\n", sizeof(arr));
- printf("strlen_str: %lu\n", strlen("woshizifuchuan"));
- printf("sizeof_str: %lu\n", sizeof("woshizifuchuan"));
- }
- ```
- 结果
- ```text
- strlen_ptr: 9
- sizeof_ptr: 8
- strlen_arr: 9
- sizeof_arr: 20
- strlen_str: 14
- sizeof_str: 15
- ```
- 最近维护一个程序,发现代码里面总是会对 `char *` 混用 `strlen` 和 `sizeof`
- 但是可以正常运行, 这里测试一下。。
- #### `strlen`
- 都是取字符串的真实长度,
- #### `sizeof`
- 1. 字符串数组的时候 `sizeof` 取分配的数组的大小
- 2. 字符串指针的话取得是 `char` 的长度,
- 3. 字符串常量的话是字符串分配的长度包含最后的`\0`符号。所以会经常看到 `sizeof("str") - 1` 这种写法
- 也就是当字符串指针的时候长度不超过 `char` 的长度的话,分配出来内存够用,于是不会报错。。。
Add Comment
Please, Sign In to add comment