fprintf和NULL终止符

3

我正在使用fprintf将一个字符串附加到文档中,这是我想问的一行代码:

fprintf(win, bff[i - 2] != '\n' && bff[i - 2] != '\r' ? "\nmultiscreen=1" : "multiscreen=1");

代码可以正常运行,它将“multiscreen=1”添加到文件中下一行的末尾。但是,如果我理解正确的话,它不会在“multiscreen=1”的结尾添加NULL字符吗?因为字符串末尾的NULL是C语言的特性,写入文件是否会有影响呢?或者使用fputs而不是fprintf会更加正确吗?

1
文件中不会写入任何NUL。只是想指出我会将您的代码行写成 fprintf(win, "%smultiscreen=1", bff[i - 2] != '\n' && bff[i - 2] != '\r' ? "\n" : "") - pmg
1
字符串不以NULL结尾,而是以\0结尾,这是一个数值为零的字符。有时候这个字符被称为NUL。它与在C语言中用来表示不持有有效地址的指针的NULL非常不同。 - unwind
3个回答

7

字符串字面量会自动在其末尾添加一个0。因此,您不需要自己添加。

NUL终止符仅用于fprintf(或您正在使用的任何字符串函数)知道何时停止从指针写入字符;实际上,没有NUL被写入文件。

是的,我建议您使用fputs而不是fprintf,因为您没有使用fprintf的任何格式化功能,除非您使用pmg在您的问题评论中提出的建议,该建议使用格式化序列。


1
@Minion91 是的,我只是在谈论这个具体的例子。 - Seth Carnegie

1

文件中不需要使用NULL。这是C语言的惯例,与文件无关。你做得很好。


1

如果你写入文件,就不需要尾随的\0。这只是C语言用来分隔字符串的一种方式,否则就无法知道字符串何时结束。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接