回复 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; }