我在 SO 上浏览了很多关于fgets()
overscanf()
和. 的首选使用的帖子。有些人gets()
提到了 fgets()手册页。
然后有这篇精彩的帖子显示了fgets()
使用strlen()
. 我试图通过一个程序对其进行测试:\n
strlen()
#include<stdio.h>
#include<string.h>
#define text_size 10
int main(void)
{
char str[text_size+1];
fgets(str,sizeof(str),stdin);
printf("%s",str);
printf("%d",strlen(str));
return 0;
}
当我输入大小小于text_size
的文本时,返回值 (text_size+1),在阅读了保留后文本strlen(str)
的手册页后,这对我来说是很容易理解的。\n
例如:-
输入:你好
输出:你好 6(我猜 \n 保留在这里)。
但是当我输入精确大小的文本text_size
甚至更大的大小时,返回的值strlen(str)
等于 (text_size) 并因此打印出 10,我想知道为什么\n
这里丢弃了?
输入:helloworldhi
输出:helloworld 10(为什么这里没有返回 11,因为还有 1 个字符位置仍然存在,我不明白这里的哪些字符被优先考虑\0
或者\n
为什么?
我不太确定 C 中所有未定义的行为,但我们可以称它为 UB 吗?