📅  最后修改于: 2023-12-03 15:12:11.454000             🧑  作者: Mango
在C语言中,当需要读取带有空格的字符串时,常规的 scanf
函数会将空格视为字符串结束的标志,因此无法直接通过 scanf
读入带有空格的字符串。本文将介绍几种方法来读取带有空格的字符串。
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
函数需要引入 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
函数可以读取带有空格的字符串,但是不安全,容易导致缓冲区溢出。此函数应该被避免使用。
#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
函数无法检查字符串长度,因此会在存放过程中导致缓冲区溢出。