在C中将空行写入文件

时间:2011-03-20 02:51:14

标签: c

我使用write函数将一些东西写入文件。现在我想在下一个写入函数之前在文件中插入一个空白链接,有人知道怎么做吗?

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

是我的第一次写作,所以现在是新的一行:

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

或者我应该创建一个新的char[3] = '/n';

3 个答案:

答案 0 :(得分:6)

假设你的意思是POSIX write()函数,那么这样的东西应该有效:

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

请注意,"\n"是1个字符的字符串 - 您可能需要"\r\n",具体取决于您是否需要回车以及文件中的新行。

答案 1 :(得分: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年前修改过的一些代码。

(在MacOS X 10.6.6上使用GCC 4.5.2进行测试。)

答案 2 :(得分:0)

  

我知道这篇文章很老了但是,我正在创建一个日志文件   我试着写一个“\ n”它不会写它....:

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

文件中的输出是:

==== NEW CLIENT ====
     

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

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

无事可做......:/

我明白了...我正在编译linux中的程序并检查windows中的日志文件,如果我在linux中打开日志文件就可以了......