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類)?

TAG:編程語言 | 信息技術IT | C編程語言 | 碼農新人 |