如果我們要使用獲得在C我們會做這樣的事情:是否有可能在不知道c中數組長度的情況下使用gets?
int main(void) {
char str[100];
while (gets(str)) {
printf("%s\n",str);
}
}
我們必須知道STR第一的長度(即100),然後用得到。不知道c中數組的長度,可以使用gets嗎?
如果我們要使用獲得在C我們會做這樣的事情:是否有可能在不知道c中數組長度的情況下使用gets?
int main(void) {
char str[100];
while (gets(str)) {
printf("%s\n",str);
}
}
我們必須知道STR第一的長度(即100),然後用得到。不知道c中數組的長度,可以使用gets嗎?
如果您的意思是安全使用gets
,否則不可能。
建議:不要使用gets
,因爲不知道長度第一,它可能會導致緩衝區溢出。改爲使用fgets
,或在C11中使用gets_s
。
事實上,自C11以來,gets
已從stdio.h
中刪除。 (在C99,它是不建議使用)
簡短的回答:第
龍答:如果您知道該字符串將不超過一定的規模更大,你總是可以分配的內存更大的塊。例如,一個字符串不可能長於1k,所以你總是可以簡單地分配一個大小爲1k的數組。但是,這實際上效率低下,並且如果字符串可以任意長,也不起作用。
'gets'只能從標準輸入中讀*。除非您完全控制標準輸入中出現的內容,並且可以保證沒有輸入行會超出緩衝區大小,否則不能安全地使用'gets'。 (想想你的貓站在空間欄上幾分鐘。) –
是的,我並不是說它是安全的,但它至少可以給你一個很好的保證金。 – qaphla
很簡單:*永遠不要使用'gets' *。 –
問這個問題的次數? :「抱歉的數據無法放入變量」:P – 0decimal0