【发布时间】:2015-05-26 13:05:31
【问题描述】:
我在 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 是一个数字常量,表示可以读取的字符串的最大长度。
读取没有固定长度的字符串的最佳方法是什么?
【问题讨论】:
-
请格式化和缩进你的代码,然后谷歌
realloc。 -
在 ANSI C 中,强制转换 malloc() (或 calloc() 或 realloc() )的返回值是不正确的。
-
还应该定义
cint,至少能够成功检测到EOF。getchar()返回int,顺便说一句。 -
您的代码导致缓冲区溢出。当您 malloc
N字节时,有效索引为0到N-1。但是你继续在最后设置string[N]。