C语言fgets读取换行符问题

如果用fgets输入字符串,是不是比字符串本身长度多一位(因为\0前面有一个\n)?
使用gets是不是就不会这样,但是gets不安全
如何解决这个问题啊

当你输入的字符数大于参数时,‘\0’结尾, 小于等于参数时‘\n\0’结尾

if(str[strlen(str) - 1] == '\n') {      // 去掉换行符就行了
     str[strlen(str) - 1] = '\0';   
 }