c - 如何允许使用 scanf 输入空格?

标签 c string printf scanf whitespace

使用以下代码:

char *name = malloc(sizeof(char) + 256); 

printf("What is your name? ");
scanf("%s", name);

printf("Hello %s. Nice to meet you.\n", name);

用户可以输入他们的名字,但是当他们输入带有空格的名字时,如 Lucas Aardvark , scanf()Lucas之后切断一切.我如何制作 scanf()允许空格

最佳答案

人们(和尤其是初学者)不应该使用scanf("%s")gets() 或任何其他函数没有缓冲区溢出保护,除非您确定输入将始终是特定格式(甚至可能不是)。

请记住,scanf 代表“扫描格式化”,而且除了用户输入的数据之外,less 格式非常宝贵。如果您可以完全控制输入数据格式,但通常不适合用户输入,那么这是理想的选择。

使用 fgets()(具有 缓冲区溢出保护)将您的输入转换为字符串,并使用 sscanf() 对其求值。由于您只需要用户输入的内容而不进行解析,因此在这种情况下您实际上并不需要 sscanf():

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

/* Maximum name size + 1. */

#define MAX_NAME_SZ 256

int main(int argC, char *argV[]) {
    /* Allocate memory and check if okay. */

    char *name = malloc(MAX_NAME_SZ);
    if (name == NULL) {
        printf("No memory\n");
        return 1;
    }

    /* Ask user for name. */

    printf("What is your name? ");

    /* Get the name, with size limit. */

    fgets(name, MAX_NAME_SZ, stdin);

    /* Remove trailing newline, if there. */

    if ((strlen(name) > 0) && (name[strlen (name) - 1] == '\n'))
        name[strlen (name) - 1] = '\0';

    /* Say hello. */

    printf("Hello %s. Nice to meet you.\n", name);

    /* Free memory and exit. */

    free (name);
    return 0;
}

关于c - 如何允许使用 scanf 输入空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1247989/

相关文章:

c - 如何使用仅手动同步到磁盘的 mmap 创建检查点文件

c - 生成任意大小的字符串 append 其他字符串 : how?

python - 旧的 python 散列从左到右完成——为什么不好?

Java TextIO.putf() 方法

c - 如何在每个有符号整数之间添加 "+"

C - 替换字符串中的子字符串

c - 用C读取文件并将数据存储在数组中

java - 使用正则表达式重命名字符串

c - x = (char *)&a 的作用是什么,它有什么作用?

c - 关于我的 C 编程代码、编译器问题的问题