s_gets函數是個什麼鬼?它為什麼能讀取字元串?
自學C,菜鳥一個。看到字元串其他的都看得懂,唯獨這個s_gets(),它為什麼能讀取字元串保存到字元數組中去?
就好像是:int ct=0;char Iput [5][10];while(ct&<5 s_gets(iput[0],10-1)!= NULL ){
ct++; }函數中有string.h。和一個函數原型的聲明。 char * s_gets(char * st,int n);我就想知道s_gets為什麼能讀取字元串?有大神能詳細講解嗎?
s_gets()函數的用法:
char *s_gets(char * st, int n)
{
char * ret_val;
int i = 0;
ret_val = fgets(st, n, stdin);
if (ret_val)
{
while (st[i] != "
" st[i] != " ")
i++;
if (st[i] == "
")
st[i] = " ";
else
while (getchar() != "
")
continue;
}
return ret_val;
}
fgets的作用是讀取字元串,直至達到最大字元數量或遇到第一個換行符為止,且fgets會把讀取到的換行符儲存在字元串中(fgets函數為&
有些時候為了避免換行符儲存在字元串中,字元串中有換行符可能會帶來一些麻煩,就創建了s_gets()函數,其作用是讀取整行輸入並用空字元代替換行符,或讀取一部分輸入,並丟棄其餘部分
如果fgets成功讀取到了字元串則進入if判斷語句,通過循環找出字元串中的換行符或空字元,,,
fgets函數讀到換行符時就會停止讀入字元,如果找到換行符,if語句就會將其變為空字元並返回字元串,若while循環讀取到了空字元,由於空字元象徵著字元串的結束,此時需要丟棄輸入行的餘下字元。
因為輸入行中多出來的字元會被留在緩衝區中,成為下一次讀取語句的輸入,假設下一條語句要讀取一個char類型的值,就可能導致程序崩潰,丟棄輸入行餘下的字元保證了讀取語句和鍵盤輸入同步
講了怕你聽不懂哇。。。
而且看這個函數s_前綴感覺像微軟系獨有的。。。我學Linux也不懂微軟的那套玩意。。。
update:s_開頭的c函數是微軟自己做的一套安全函數,功能與去掉s_的同名函數一樣,比如s_gets與gets相同s_printf與printf功能相同謝謝邀請。您確定是s_gets么?我查找到各種資料沒有在string.h里有這個函數。但是有一個類似的函數叫gets_s。具體用法請參考http://zh.cppreference.com/w/c/io/gets
推薦閱讀:
※CPU的浮點運算能力在用戶使用和體驗層面具體表現主要有哪些?
※如何看待微軟電話技術支持收費?
※如何看待【美禁止向華出口超算相關技術】事件?
※面授培訓和自己在網上買破解版資源自學有何區別?
※擁有什麼樣的能力能更好地申請到AIESEC海外技術類實習(IT類)?