C语言fgets()函数

 

测试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,那么就会把结束输入的回车读入,在输出字符串时就会换行

 

你可能感兴趣的:(C语言)