测试fgets(string,num,stdin)与定义的字符数组的长度的关系,
str是要存入的字符的字符数组的指针,num指定了读入字符的最大个数,fgets()函数会在遇到第一个换行符或者读取了num-1个字符后停止读取;stdin指定了从键盘读入,需要注意的是,当一行字符串的个数小于num-1时,fgets会读入换行符并将其存入字符数组中
测试程序1:
# include
int main(void)
{
char str[20]; /*定义一个最大长度为19, 末尾是'\0'的字符数组来存储字符串*/
printf("请输入一个字符串:");
fgets(str, 7, stdin); /*从输入流stdin即输入缓冲区中读取7个字符到字符数组str中*/
printf("%s\n", str);
return 0;
}
结果1:
请输入一个字符串:HelloWorldHowareyou
HelloW
Process returned 0 (0x0) execution time : 12.628 s
Press any key to continue.
到W正好为6个字符,最后一个'\0',总共7个字符,fgets()不会再字符串的最后加上'\0',所以(string,num,stdin)num需要包含'\0'
测试程序2:
char string[len]:len应为字符个数加上'\0'的总个数
# include
int main(void)
{
char str[5];
char *string = str; //一定要先给指针变量初始化
printf("请输入字符串:");
fgets(string, 5, stdin); //size指定为比字符数组元素少一就行了
printf("%s", string); //printf中不需要添加'\n', 因为字符串中已经有了
printf("==================");
return 0;
}
结果1
请输入字符串:Hell
Hell==================
Process returned 0 (0x0) execution time : 7.524 s
Press any key to continue.
结果2:
请输入字符串:Hello
Hell==================
Process returned 0 (0x0) execution time : 8.133 s
Press any key to continue.
结果3:
请输入字符串:HelloWorld
Hell==================
Process returned 0 (0x0) execution time : 6.708 s
Press any key to continue.
结果4:
请输入字符串:He
He
==================
Process returned 0 (0x0) execution time : 3.385 s
Press any key to continue.
可以看出如果输入个数小于fgets(string,num,stdin)中的num-1,那么就会把结束输入的回车读入,在输出字符串时就会换行