2011-03-20 127 views
0

我用寫功能將一些東西寫入文件。現在我想在下一個寫入函數之前插入一個空白鏈接到文件中,有誰知道該怎麼做?將空行寫入文件C

Write(logs,log,strlen(log)); 

是我第一次寫,所以現在是新的生產線將是:

Write(logs,'/n',strlen(log)); 

,或者我應該創建一個新的char[3] = '/n';

+1

這取決於Write()函數的作用。 (第三個參數可能意味着要寫多少個字符,但這是最好的猜測) – 2011-03-20 02:56:01

回答

6

假設你指的是POSIX write()功能,這樣的事情應該工作:

write(logs,"\n",1); 

注意"\n"是1個字符串 - 這取決於如果你需要一個回車和一個新的你可能想"\r\n"在文件中的行。

0

您需要解決的第一個問題是換行符由反斜槓-n('\n'"\n")表示,而不是斜槓-n。

當你寫'/n',你應該得到一個編譯器警告大約一個多字符常量這是一個不可移植片C的

很明顯,你可以創建一個變量來保存換行,但真的沒有必要;字符串文字將會很好。如果你這樣做,正確的符號是:

const char newline[] = "\n"; 

你可以寫:

const char rather_odd[3] = { '/n' }; 

但是......括號是必要的,第一個字符一個編譯器相關的值,其他兩個字符是NUL '\0'。這也超過了最小的必要空間; newline變量是一個2字節的數組。

有了您的非標準Write()功能,正確的語法大概是:

Write(logs, "\n", 1); 

這發出一個換行;如果前一個字符串(log中的字符串)本身沒有被換行符終止,則文件中沒有空行;你將不得不寫第二個換行符。你甚至可能要測試:

size_t len = strlen(log); 
Write(logs, log, len); 
len = (log[len-1] == '\n') ? 1 : 2; 
Write(logs, "\n\n", len); 

注意,那就是,GCC會警告你介紹了一個log全局變量(因爲C標準保留的名稱)。局部變量是可以的。

$ cat x.c 
int x = '/n'; 
int log = 2; 
$ gcc -c x.c 
x.c:1:9: warning: multi-character character constant 
x.c:2:5: warning: built-in function ‘log’ declared as non-function 
$ 

最近我遇到了這個問題,同時復活了一些大約20年前最後修改的代碼。

(測試用GCC 4.5.2在MacOS X 10.6.6。)

0

我知道這個職位是很老,但我'創建日誌文件,當 我試圖寫一個「 \ n「它不會寫入....:

write(fd,"\n\n==== NEW CLIENT ====\n\n",24); 

文件中的輸出是:

==== NEW CLIENT ==== 

沒有任何空白行...任何想法?即使我把:

write(fd,"\n",1); 

無關...:/

我知道了......我是編譯Linux中的程序和檢查在Windows日誌文件,如果我打開在Linux中的日誌文件沒關係......