C语言char指针仅返回首元素大小,如何提取字符数组长度
C语言char指针指向字符串长度计算解决方案
你当前使用sizeof(*txtStr)计算长度的方式存在本质错误:txtStr是char*类型指针,解引用后得到单个char类型元素,sizeof运算结果固定为1,无法获取整个字符数组的长度。
正确实现方案
方案1:使用标准库strlen(适用于以\0结尾的C风格字符串)
你示例中传入的是字符串常量,默认自带\0结束符,直接使用strlen即可:
- 首先在代码头部引入
string.h头文件(strlen的定义在该头文件中),同时补充malloc需要的stdlib.h头文件。 - 将
text函数中给length赋值的语句替换为调用strlen。
修改后的完整代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct _Text { char *str; int length; int counter; } *Text; Text text(char *txtStr){ Text txt= malloc(sizeof(*txt)); txt->str=txtStr; txt->counter=1; txt->length=strlen(txtStr); return txt; } int main(void) { Text txt= text("hello"); // 测试输出长度 预期为5 printf("字符串长度:%d\n", txt->length); // 注意:使用完记得释放malloc申请的内存避免泄漏 free(txt); return 0; }
方案2:额外传入长度参数(适用于非\0结尾的字符数组)
如果你要处理的字符数组没有结束符,需要在调用text函数时主动传入数组长度:
// 函数声明修改为 Text text(char *txtStr, int len){ Text txt= malloc(sizeof(*txt)); txt->str=txtStr; txt->counter=1; txt->length=len; return txt; } // 调用示例:假设arr是长度为10的字符数组 // Text txt = text(arr, 10);
注意事项
strlen计算的长度不包含末尾的\0,如果需要算上结束符的总内存大小,需要在strlen结果的基础上加1。- 不要忘记释放
malloc申请的堆内存,避免内存泄漏。
内容的提问来源于stack exchange,提问作者Corbel Jhonshon
相关产品推荐
相关产品推荐

