从 fgets() 输入中删除换行符

1 c printf gcc newline fgets

我正在尝试编写一个非常简单的程序,它要求您输入您的姓名,然后它会向您致意。代码如下:

#include <stdio.h>

int main() {
    char name[30];
    printf("Write your name: ");
    fgets(name, 30, stdin);
    printf("Hello, %s. Nice to meet you.\n", name);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是当我编译并运行程序时,会显示以下输出(输入名称John Doe):

#include <stdio.h>

int main() {
    char name[30];
    printf("Write your name: ");
    fgets(name, 30, stdin);
    printf("Hello, %s. Nice to meet you.\n", name);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

起初我打算使用gets()which 显然不打印换行符,但编译器(GCC)抱怨它:

`gets' 函数是危险的,不应使用。

如何从输入的字符串中删除换行符fgets()

ano*_*knr 5

name[strlen(name)-1]='\0';在之后添加这行代码fgets()。的newline发生,因为终端符号fgets()\n没有\0。所以我们需要它,使之\0

修改后的代码:-

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

int main() {
    char name[30];
    printf("Write your name: ");
    fgets(name, 30, stdin);
    name[strlen(name)-1]='\0';                        // making '\n' '\0'
    printf("Hello, %s. Nice to meet you.\n", name);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出 :-

Write your name: world
Hello, world. Nice to meet you.
Run Code Online (Sandbox Code Playgroud)

  • 这有效但有风险:如果(无论出于何种原因)字符串*不*以换行符结尾怎么办? (2认同)