This question already has answers here:
Closed 2 years ago.
Removing trailing newline character from fgets() input
(12个答案)
我有个问题。在使用fgets函数之后,我试图查看一些字符串的长度如果在字符串中可以输入字符串的字符串(比如:字符串中的最大字母是9,而我输入4个字母),则得到字符串+ 1的长度。为什么?
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
    char name[10]={0};
    printf("enter your name\n");
    fgets(name, 10, stdin);
    printf("your name is %s and it is %d letters\n", name, strlen(name)); // length problem

    return 0;
}

最佳答案

从fgets手册页(https://linux.die.net/man/3/fgets):
fgets()从流和
将它们存储到s所指的缓冲区中。在
或换行如果读取换行符,则将其存储在缓冲区中。
终止的空字节(aq\0aq)存储在
缓冲器。
所以它会在你的4个字母后面加上'\n',返回string_length+1
Removing trailing newline character from fgets() input开始,您可以将@Tim采作为解决方案添加到代码中。
在删除换行符之后,仍可以使用fgets()函数读取该行。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


int main(void)
{
    char name[10] = { 0 };
    printf("enter your name\n");
    fgets(name, 10, stdin);
    printf("your name is %s and it is %d letters\n", name, strlen(name)); // length problem
    name[strcspn(name, "\n")] = 0;
    printf("NEW - your name is %s and it is %d letters\n", name, strlen(name));
    return 0;
}

结果是:
enter your name
Andy
your name is Andy
 and it is 5 letters
NEW - your name is Andy and it is 4 letters
Press any key to continue . . .

关于c - C中带有fgets函数的字符串长度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41572713/

10-15 02:12