回复 10楼 AleTiff
不好意思,上述函数严格地分析,存在一个小 BUG,允许我修正一下:
程序代码:
char* gets_safe()
{
const int LENGTH = 1;
size_t len = 0;
char* ret = NULL;
char buffer[LENGTH + 1] = {0};
while( LENGTH != 0 ){
size_t iLen = 0;
if( fgets(buffer, LENGTH + 1, stdin) == NULL ){
buffer[0] = 0;
break;
}
iLen = strlen(buffer);
if(iLen != 0){
if( ret == NULL )
ret = (char*)malloc(iLen + 1);
else{
char* tmp = (char*)malloc(len + iLen + 1);
strncpy(tmp, ret, len);
free(ret);
ret = tmp;
}
strncpy(ret + len, buffer, iLen);
len += iLen;
ret[len] = 0;
}
if(buffer[iLen - 1] == 0x0A){
ret[len - 1] = 0;
break;
}
}
fflush(stdin); // 在这个函数将要退出前,对 stdin 里应该给予清空处理
return ret;
}







