📜  读取带空格的字符串 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:12:11.454000             🧑  作者: Mango

读取带空格的字符串 - C 编程语言

在C语言中,当需要读取带有空格的字符串时,常规的 scanf 函数会将空格视为字符串结束的标志,因此无法直接通过 scanf 读入带有空格的字符串。本文将介绍几种方法来读取带有空格的字符串。

使用 fgets 函数

fgets 函数可以读取一行字符串(包括空格),并且不会将换行符(\n)视为字符串的结束标识。使用 fgets 函数需要引入 stdio.h 头文件。

#include <stdio.h>
#define MAX_LEN 100 // 字符串最大长度

int main() {
  char str[MAX_LEN];
  printf("请输入一个带有空格的字符串:\n");
  fgets(str, MAX_LEN, stdin); // 从标准输入读取一行字符串到 str 中
  printf("输入的字符串是:%s\n", str);
  return 0;
}

在上述代码中,fgets(str, MAX_LEN, stdin) 从标准输入中读入字符串,MAX_LEN 是指定的字符串最大长度,stdin 表示从标准输入中读取。读入的换行符也会被保存在字符串中。

使用 getchar 函数

一个字符一个字符地读取字符串,遇到空格时以及到达输入缓冲区末尾时停止。使用 getchar 函数需要引入 stdio.h 头文件。

#include <stdio.h>
#define MAX_LEN 100 // 字符串最大长度

int main() {
  char str[MAX_LEN];
  printf("请输入一个带有空格的字符串:\n");
  int i = 0;
  char c = getchar(); // 从标准输入读取一个字符
  while (c != '\n' && i < MAX_LEN - 1) {
    str[i] = c;
    i++;
    c = getchar();
  }
  str[i] = '\0'; // 在字符串末尾添加空字符,表示字符串结束
  printf("输入的字符串是:%s\n", str);
  return 0;
}

在上述代码中,getchar() 从标准输入读入一个字符,while 循环遍历每个字符,直到遇到换行符或者达到最大长度。str[i] = '\0' 在字符串末尾添加空字符,表示字符串的结束。注意,这里为了保证字符串不溢出,将字符串最大长度设为 MAX_LEN - 1,因为还需要在字符串的结尾添加一个空字符。

使用 gets 函数(不推荐)

gets 函数可以读取带有空格的字符串,但是不安全,容易导致缓冲区溢出。此函数应该被避免使用。

#include <stdio.h>
#define MAX_LEN 100 // 字符串最大长度

int main() {
  char str[MAX_LEN];
  printf("请输入一个带有空格的字符串:\n");
  gets(str); // 从标准输入读取带有空格的字符串到 str 中
  printf("输入的字符串是:%s\n", str);
  return 0;
}

在上述代码中,gets(str) 从标准输入中读入字符串,存放到 str 中。由于 gets 函数无法检查字符串长度,因此会在存放过程中导致缓冲区溢出。