我想修剪fgets輸出中的換行符。如何在fgets()輸出結尾修剪' n'
while(fgets(buff,1024,fp)){
printf("start%send",buff);
如果在文件中有一行「C is cool」。然後打印上面的代碼。
startC is cool
end
但我想它打印像
startC is coolend
如何做到這一點
我想修剪fgets輸出中的換行符。如何在fgets()輸出結尾修剪' n'
while(fgets(buff,1024,fp)){
printf("start%send",buff);
如果在文件中有一行「C is cool」。然後打印上面的代碼。
startC is cool
end
但我想它打印像
startC is coolend
如何做到這一點
清潔方法
#include <string.h>
//...
buff [ strcspn(buff, "\r\n") ] = 0;
這將安全工作作爲行結束的任何味道,甚至如果沒有,則即使該字符串爲空。
不錯的做法,但評論是誤導和違背了答案的其餘部分。 –
@R ..謝謝,但你能解釋一下你對我評論的評論嗎? –
評論說*拖尾*新行,但是你的代碼實際上做的是在第一個換行符(或回車)字符處截斷字符串。 'fgets'不能產生一個換行符,除了後面的換行符,但是可以有大量的嵌入式回車符。 –
您可以將最後一個字符設置爲'\0'
(空終止符)。這不是一個好方法,因爲該文件可能並不總是有換行符。
buff[strlen(buff) - 1] = '\0';
或環在字符數組結束更換'\n'
與'\0'
int i;
for(i = 0; i < strlen(buff); i++)
{
if(buff[i] == '\n')
{
buff[i] = '\0';
break;
}
}
或在與strcspn()
末端拆卸'\n'
:
buff[strcspn(buff, "\r\n")] = 0;
從文件讀取的最後一行可能沒有'newline',在這種情況下,您的第一個示例很弱。 'newline'不是由'fgets'添加的,它是文件中的內容。 –
的確,我只是把它包括在內,因爲這是一種適用於這個問題的方法。我會編輯以澄清這不是一個好方法。 –
如果'strlen(buff)'爲0,則會產生危險的未定義行爲。 –
髒方法'的buff [strlen的(淺黃色)-1] = 0;' –
@Lashane:在沒有輸入(EOF)和'strlen(buff)'爲0的情況下,這是危險的。 –