【发布时间】:2014-11-26 20:15:06
【问题描述】:
对于大多数人来说,这似乎是一个愚蠢的问题,但我仍在努力确定最终答案。几个小时前,我决定用 fgets() 替换我项目中的所有 scanf() 函数,以获得更健壮的代码。 我了解到 fgets() 会自动以 '\n' 和 NUL 字符结束插入的输入字符串,但是.. 假设我有这样的事情:
char user[16];
存储用户名的 16 个字符的数组(最多 15 个字符,我为 NUL 终止符保留最后一个字符)。 问题是:如果我插入一个 15 个字符的字符串,那么 '\n' 将出现在数组的最后一个单元格中,但是 NUL 终止符呢? '\0' 是否存储在以下内存块中? (调用 printf() 函数时没有分段错误意味着插入的字符串实际上是 NUL 终止的,对吧?)。
【问题讨论】:
-
在这种情况下,
\n将留在流中。它会在那里供您下次阅读。 -
你的缓冲区应该声明为
char user[16];。 -
呃,对不起各位!我的错! :)
-
解决您的最后一个问题:不,将不带 0 字节的字符数组传递给
printf是不保证段错误。