从指针中提取字符数组的长度的问题
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?)
同样,我知道你的问题纯粹是一个例子,但最好注意一下。 :)
#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?)
同样,我知道你的问题纯粹是一个例子,但最好注意一下。 :)