从指针中提取字符数组的长度的问题

problem extracting the length of an array of characters from a pointer

#include <stdio.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=sizeof(*txtStr);
  return txt;
}

int main(void) {
  
  Text txt= text("hello");

  return 0;
}

我需要提取数组长度但是指针只是 returns 第一个元素的大小,我怎样才能确定数组的长度?

使用 strlen 代替 sizeof

C 中的字符串是一系列以 NUL 结尾的字符(又名 '[=12=]'),因此您可以计算出有多少个字符

char *pos = txtStr;
txt->length = 0;
while(*pos != '[=10=]')
  {
  txt->length++;
  pos++;
  }

或者因为生命太长无法继续编写执行此类操作的代码,所以有一个标准函数可以为您完成所有艰苦的工作,称为 strlen

txt->length = strlen(txtStr);

您还想制作 txtStr 的副本,因为它的内容可能会在您新创建的 Text 之前超出范围...

我想补充一点: 使用 malloc 后,您应该在不再需要时释放该内存。 我想这只是一个示例代码,但最好习惯这样写。 如果处理不当,返回分配的内存可能会有问题(这里的好答案:Is it bad manners to return a heap allocated pointer from a function?

同样,我知道你的问题纯粹是一个例子,但最好注意一下。 :)