我已经的大小的输入通过许多职位上SO关于在scanf()
优选使用的fgets()
和gets()
。有的称为关于与fgets()man page。与fgets()不保留“ n”的阵列
再有就是this wonderful post表示利用作为在手册页FGETS(描述中提到这个职位的答案strlen()
。一是通过fgets()
存储的字符数)保留\n
(如果有的话),这就是为什么strlen()
函数返回text_size + 1。我试图通过一个程序来测试它:
#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
较小的输入文本时,strlen(str)
返回值(text_size + 1)阅读手册页,它保留了后是完全可以理解我文字后的\n
。如对实施例: -
INPUT:你好
OUTPUT:您好6(我想\ n被这里保留)。
但是,当作为text_size
或确切大小的I输入文本甚至更大的尺寸由strlen(str)
返回的值等于(text_size),因此10被打印出来,不知为什么\n
此处丢弃?
输入:helloworldhi
OUTPUT:HelloWorld的10(为什么这里没有返回11日以来1米字元的地方还是有的,这里我就不明白它在这里被赋予优先\0
或\n
字符和为什么???
我不是很肯定在C中的所有未定义的行为,但我们可以把它叫做一个UB?
+1链接。谢谢!! – 0decimal0
确定然后printf()语句应该只打印文本大小为1? – 0decimal0
@PHIfounder它应该在您的示例中打印最大尺寸为-1的文本(或者更确切地说是'text_size')。 –