[英]C - Using getchar over fgets for stdin
新來的,
與fgets()
相比,使用getchar()
方法讀取字符串是否有任何缺點,除了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;
}
與
fgets()
相比,使用getchar()
方法讀取字符串是否有任何缺點,除了getchar()
僅從 stdin 讀取的事實之外,我們可以為fgets()
選擇一個流。
是的。
fgets()
在一般情況下只需要一次調用,它會自動處理識別行尾。 一般情況下需要在循環中調用getchar()
,需要自己處理行終止識別。 這使得getchar()
使用起來更加復雜,並且為此目的成本更高。
此外,如果您的程序中有多個地方您想讀取字符串,您可能希望將任何基於getchar()
的解決方案放入一個function
以便您可以重用它,然后您就可以直接使用您自己的無論如何重新實現fgets
。
期望編寫和調整您的 C 庫的專家實現fgets()
效率比您通過使用getchar()
滾動您自己的庫所能合理期望的更有效也是合理的。
我看到
getchar()
的一個優點是fgets()
要求我們指定可以提前讀取的最大字符數,而在getchar()
情況下,我們可以使用緩沖區來存儲字符串並根據需要重新分配.
如果您的意思是使用getchar()
允許您逐個字符地重新分配,那么
fgets()
獲得它。fgets
結合使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.