我在 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/