gpt4 book ai didi

c - 动态增加字符数组的维数

转载 作者:太空宇宙 更新时间:2023-11-04 01:59:26 26 4
gpt4 key购买 nike

我在 C 语言中有这个函数,我在我的项目中使用它来读取输入中的字符:

char* readStringInp()
{
char* string=NULL,c=NULL;
int i=0;

string=(char *)malloc(sizeof(char)*LGTH_STRING_INPUT);

for(i=0;i<LGTH_STRING_INPUT && ( (c=getchar()) != '\n' && c != EOF );i++)
string[i]=c;

string[i]='\0';

return string;
}

LGTH_STRING_INPUT 是一个数字常量,表示可以读取的字符串的最大长度。读取不固定长度的字符串的最佳方法是什么?

最佳答案

这会为 20 个字符分配内存。当使用了 18 个字符时,另外 20 个字符由 realloc 分配。随着字符串的增长,将分配 20 个字符的额外增量。如果 realloc 失败,则返回当前字符串。当找到换行符或 EOF 时,while 循环终止。
分配的内存应该由调用函数释放。
编辑添加 main() 以显示已分配内存的释放

#include <stdio.h>
#include <stdlib.h>

char* readStringInp();

int main()
{
char *s=readStringInp();
if ( s != NULL)
{
printf ( "%s\n", s);
free ( s);
}
return 0;
}

char* readStringInp()
{
char* string=NULL, *temp = NULL;
int c=0, available=20, used=0, increment=20;

string=malloc(available);
if ( string == NULL)
{
printf ( "malloc failed\n");
return NULL;
}

while( (c=getchar()) != '\n' && c != EOF )
{
if ( used == available - 2)
{
available += increment;
temp = realloc ( string, available);
if ( temp == NULL)
{
printf ( "realloc failed\n");
return string;
}
string = temp;
}
string[used]=c;
used++;
string[used]='\0';
}
return string;
}

关于c - 动态增加字符数组的维数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29211985/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com