【发布时间】:2018-08-21 15:59:15
【问题描述】:
这里是新的,
使用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;
}
【问题讨论】:
-
它们是完全不同的东西,最好的使用完全取决于你在做什么。
-
你考虑过scanf吗?
-
如果你想从指定的流中读取单个字符,有
fgetc。 -
我知道
getchar()使用fgetc()但我的问题很清楚“是否有理由更喜欢其中一个,只要它们都足以完成手头的任务。” -
如果输入字符串使用基于字符串的函数。如果输入字符使用基于字符的函数。你在做什么?