新来的
使用getchar()
方法而不是fgets()
来读取字符串是否有任何缺点,除了getchar()
仅从stdin
读取的事实之外,为fgets()
选择一个流。
假设我只需要使用stdin
,是否有理由为什么我应该选择一个或另一个?
我看到的getchar()
的一个优势是fgets()
要求我们指定可以高级读取的最大字符,而在getchar()
的情况下可以使用缓冲区存储字符串并根据需要重新分配。
[编辑]
我实现了此功能以读取输入,但是如果知道字符串的长度,fgets()
也足够时,有任何理由这样做。
char *scanner ( const char *text )
{
char *buffer = ( char * ) malloc ( sizeof ( char ) * BUFFER_SIZE );
int token;
int length = 0;
int limit = BUFFER_SIZE;
printf("%s", text);
while ( ( token = getchar ( ) ) != '\n' && token != EOF )
{
buffer [ length ++ ] = token;
if ( length > limit )
{
limit += 256;
buffer = ( char * ) realloc ( buffer, sizeof ( char ) * limit );
}
}
buffer [ length ] = '\0';
return buffer;
}
答案 0 :(得分:1)
使用
getchar()
方法相对于fgets()
用于读取字符串,而不是getchar()
仅从stdin读取,因为我们可以为fgets()
选择流。
是的
fgets()
在通常情况下仅需要一个呼叫,并且会自动识别行尾。一般情况下,getchar()
需要在循环中调用,并且您需要自己处理行终止识别。这使得getchar()
使用起来更加复杂,并且为此目的也更加昂贵。
此外,如果程序中要读取字符串的位置不止一个,则需要将任何基于getchar()
的解决方案放入function
中,以便您可以重复使用它,然后无论如何您都会直接自己复制fgets
。
也有理由期望,编写和调整您的C库的专家实现fgets()
的效率要比您合理地期望与getchar()
匹配时要高。 / p>
我看到的
getchar()
的一个优势是fgets()
要求我们 指定高级可以读取的最大字符,而 我们可以在getchar()
的情况下使用缓冲区来存储字符串和 根据我们的需要重新分配。
如果您的意思是使用getchar()
可以逐个字符地重新分配
fgets()
来实现。fgets
进行 。