第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

從fgets()輸入中刪除尾隨換行符

從fgets()輸入中刪除尾隨換行符

湖上湖 2019-05-23 10:42:13
從fgets()輸入中刪除尾隨換行符
查看完整描述

4 回答

?
HUX布斯

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊

有點(diǎn)丑陋的方式:

char *pos;if ((pos=strchr(Name, '\n')) != NULL)
    *pos = '\0';else
    /* input too long for buffer, flag error */

有點(diǎn)奇怪的方式:

strtok(Name, "\n");

請(qǐng)注意,strtok如果用戶(hù)輸入空字符串(即僅按Enter),則該功能無(wú)法按預(yù)期工作。它使\n角色完好無(wú)損。

當(dāng)然還有其他一些。


查看完整回答
反對(duì) 回復(fù) 2019-05-23
?
米脂

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超3個(gè)贊

也許最簡(jiǎn)單的解決方案使用我最喜歡的一個(gè)鮮為人知的功能strcspn()

buffer[strcspn(buffer, "\n")] = 0;

如果你想要它也處理'\r'(比如,如果流是二進(jìn)制):

buffer[strcspn(buffer, "\r\n")] = 0; // works for LF, CR, CRLF, LFCR, ...

該函數(shù)計(jì)算字符數(shù),直到它擊中a '\r'或a '\n'(換句話(huà)說(shuō),它找到第一個(gè)'\r'或者'\n')。如果沒(méi)有碰到任何東西,它會(huì)停在'\0'(返回字符串的長(zhǎng)度)。

請(qǐng)注意,即使沒(méi)有換行,這也可以正常工作,因?yàn)?code>strcspn在a處停止'\0'。在這種情況下,整條生產(chǎn)線(xiàn)只是替換'\0''\0'。


查看完整回答
反對(duì) 回復(fù) 2019-05-23
?
海綿寶寶撒

TA貢獻(xiàn)1809條經(jīng)驗(yàn) 獲得超8個(gè)贊

size_t ln = strlen(name) - 1;if (*name && name[ln] == '\n') 
    name[ln] = '\0';


查看完整回答
反對(duì) 回復(fù) 2019-05-23
?
Cats萌萌

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超9個(gè)贊

以下是'\n'從保存的字符串中刪除潛在的快速方法fgets()。
它使用strlen()2次測(cè)試。

char buffer[100];if (fgets(buffer, sizeof buffer, stdin) != NULL) {

  size_t len = strlen(buffer);
  if (len > 0 && buffer[len-1] == '\n') {
    buffer[--len] = '\0';
  }

現(xiàn)在使用bufferlen根據(jù)需要。

此方法具有len后續(xù)代碼值的附帶好處。它可以比它快得多strchr(Name, '\n')。 參考 YMMV,但兩種方法都有效。


buffer,從原來(lái)fgets()不會(huì)包含在"\n"某些情況下:
A)線(xiàn)太長(zhǎng),buffer所以只有char'\n'保存之前buffer。未讀的字符仍保留在流中。
B)文件中的最后一行沒(méi)有以a結(jié)尾'\n'。

如果輸入'\0'在某處嵌入了空字符,則報(bào)告的長(zhǎng)度strlen()將不包括該'\n'位置。


其他一些答案的問(wèn)題:

  1. strtok(buffer, "\n");無(wú)法刪除的'\n'時(shí)候buffer"\n"。從這個(gè)答案 - 在這個(gè)答案之后修改了警告這個(gè)限制。

  2. 以下罕見(jiàn)的情況下出現(xiàn)故障時(shí),首先char通過(guò)閱讀fgets()'\0'。輸入以嵌入式開(kāi)頭時(shí)會(huì)發(fā)生這種情況'\0'。然后在合法范圍之外肯定buffer[len -1]會(huì)buffer[SIZE_MAX]訪(fǎng)問(wèn)內(nèi)存buffer。黑客可能在愚蠢地閱讀UTF16文本文件時(shí)嘗試或找到的東西。寫(xiě)這個(gè)答案時(shí),這就是答案的狀態(tài)。后來(lái)一個(gè)非OP編輯它包括像這個(gè)答案的檢查代碼""。

    size_t len = strlen(buffer);if (buffer[len - 1] == '\n') {  // FAILS when len == 0
      buffer[len -1] = '\0';}
  3. sprintf(buffer,"%s",buffer);是未定義的行為:參考。此外,它不會(huì)保存任何前導(dǎo),分隔或尾隨空格?,F(xiàn)在已刪除

  4. [編輯由于后來(lái)的好回答 ]與方法buffer[strcspn(buffer, "\n")] = 0;相比,除了性能之外,1襯墊沒(méi)有問(wèn)題strlen()。鑒于代碼正在進(jìn)行I / O(CPU時(shí)間的黑洞),修剪性能通常不是問(wèn)題。如果以下代碼需要字符串的長(zhǎng)度或具有高度的性能意識(shí),請(qǐng)使用此strlen()方法。否則這strcspn()是一個(gè)很好的選擇。


查看完整回答
反對(duì) 回復(fù) 2019-05-23
  • 4 回答
  • 0 關(guān)注
  • 1321 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)