2013-07-19 46 views
-1

如果我們要使用獲得在C我們會做這樣的事情:是否有可能在不知道c中數組長度的情況下使用gets?

int main(void) { 
    char str[100]; 
    while (gets(str)) { 
    printf("%s\n",str); 
} 
} 

我們必須知道STR第一的長度(即100),然後用得到。不知道c中數組的長度,可以使用gets嗎?

+0

問這個問題的次數? :「抱歉的數據無法放入變量」:P – 0decimal0

回答

5

如果您的意思是安全使用gets,否則不可能。

建議:不要使用gets,因爲不知道長度第一,它可能會導致緩衝區溢出。改爲使用fgets,或在C11中使用gets_s

事實上,自C11以來,gets已從stdio.h中刪除。 (在C99,它是不建議使用)

1

簡短的回答:第

龍答:如果您知道該字符串將不超過一定的規模更大,你總是可以分配的內存更大的塊。例如,一個字符串不可能長於1k,所以你總是可以簡單地分配一個大小爲1k的數組。但是,這實際上效率低下,並且如果字符串可以任意長,也不起作用。

+0

'gets'只能從標準輸入中讀*。除非您完全控制標準輸入中出現的內容,並且可以保證沒有輸入行會超出緩衝區大小,否則不能安全地使用'gets'。 (想想你的貓站在空間欄上幾分鐘。) –

+0

是的,我並不是說它是安全的,但它至少可以給你一個很好的保證金。 – qaphla

+1

很簡單:*永遠不要使用'gets' *。 –

相關問題