如何获取C语言字符指针数组中指定字符串的长度
问题解答
字符串长度计算方法
str是字符指针数组,每个元素str[n]的类型为const char *也就是指针类型,sizeof(str[0])计算的是指针本身的内存占用,32位环境下固定为4字节,64位环境下为8字节,和指针指向的字符串长度没有关联,拿它计算字符串长度本身就是错误用法。
C标准库中专门用于计算字符串长度的函数是string.h头文件下的strlen(),它会从传入的指针地址开始向后遍历,直到遇到字符串末尾的\0结束符停止,返回的计数就是字符串的有效字符长度(不含末尾的\0)。
参考代码如下:
#include <stdio.h> #include <string.h> int main(void) { const char *str[] = { "apple", "ball", "cat", "dog", "mep", "helsdf" }; // 计算第一个元素指向的"apple"的长度 size_t apple_len = strlen(str[0]); printf("apple的长度为:%zu\n", apple_len); // 输出结果为5 return 0; }
字符串的内存连续性说明
你定义的这些字符串字面值不会保证连续存储:
- 存储指针的
str数组本身是连续分配内存的,所有指针元素按顺序存放在连续的内存空间中 - 每个指针指向的字符串字面值,会被编译器存储在静态常量区,C标准没有规定这些字符串的存储位置规则,编译器可以根据优化策略自由安排:可能连续排布,可能中间插入其他数据,也可能因为相同字符串复用优化让两个相同的字符串指向同一块内存,完全取决于编译器实现,没有统一结论。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

