【发布时间】:2019-01-12 17:32:09
【问题描述】:
我想在 C 中创建自己的 getline() 类函数,这就是我想出的:
void getstring(char *string)
{
fgets(string,STRING_LENGTH,stdin);
string[strlen(string)-1]='\0';
}
如果键入的字符数不超过 STRING_LENGHT(在本例中为 100)就足够了,但一旦超过,它上面的所有内容都会留在缓冲区中并跳转到下一个读取字符串。
我已经尝试使用以下过程刷新缓冲区:
void flush_buffer()
{
char c;
while((c = getchar()) != '\n' && c != EOF)
/* discard */ ;
}
它在所描述的情况下完成了它的工作,但是一旦字符串不超过 STRING_LENGHT,我需要在继续之前输入任何内容。
有什么方法可以读取字符串以便我知道是否超过了 STRING_LENGHT 以便我可以调节冲洗?
如果有更好的方法来制作类似 getline() 的函数,那就更好了。
【问题讨论】:
-
首先确保您的系统没有
getlinefunction。 -
还有一个很好的方法可以知道the
fgetsfunction是否读取了最大字符数:字符串中是否有换行符?您还需要处理错误以及实际上没有读取换行符的情况。 -
@Someprogrammerdude 为什么要确保系统还没有一个?我认为他这样做是出于教育目的,以了解如何编写这样的函数。
-
您的函数与标准的
getline()完全不同。string参数应该是char **,这样函数就可以调用malloc()和realloc()来分配足够的空间。 -
getline()的全部意义在于该行可以是任意长度,没有预定义的LINE_LENGTH限制。调用者不必分配缓冲区,函数自己分配。