我使用write函数将一些东西写入文件。现在我想在下一个写入函数之前在文件中插入一个空白链接,有人知道怎么做吗?
Write(logs,log,strlen(log));
是我的第一次写作,所以现在是新的一行:
Write(logs,'/n',strlen(log));
或者我应该创建一个新的char[3] = '/n';
?
答案 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中打开日志文件就可以了......