You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言char指针仅返回首元素大小,如何提取字符数组长度

C语言char指针指向字符串长度计算解决方案

你当前使用sizeof(*txtStr)计算长度的方式存在本质错误:txtStr是char*类型指针,解引用后得到单个char类型元素,sizeof运算结果固定为1,无法获取整个字符数组的长度。

正确实现方案

方案1:使用标准库strlen(适用于以\0结尾的C风格字符串)

你示例中传入的是字符串常量,默认自带\0结束符,直接使用strlen即可:

  1. 首先在代码头部引入string.h头文件(strlen的定义在该头文件中),同时补充malloc需要的stdlib.h头文件。
  2. 将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:24:08