
C语言字符数组如何输入字符串数组
在C语言中,可以通过使用scanf函数、gets函数、或是fgets函数来输入字符串数组。而其中,使用fgets函数是最推荐的方法,因为它能有效避免缓冲区溢出问题。接下来,我们将详细讨论如何使用这几种方法来输入字符串数组,并给出实际的例子进行说明。
一、使用scanf函数输入字符串数组
使用scanf函数来输入字符串是最直观的方法之一。scanf函数会读取用户输入的字符,直到遇到空白字符(如空格、换行符等)为止。然而,这种方法的一个缺点是,它无法读取包含空格的字符串。
示例代码:
#include <stdio.h>
int main() {
char str[100];
printf("请输入一个字符串:");
scanf("%s", str);
printf("您输入的字符串是:%sn", str);
return 0;
}
在这个示例中,我们定义了一个字符数组str,并使用scanf函数将用户输入的字符串存储到该数组中。值得注意的是,scanf函数并不会限制输入的长度,因此存在缓冲区溢出的风险。
二、使用gets函数输入字符串数组
gets函数可以读取一整行字符串,包括空格,直到遇到换行符为止。然而,由于gets函数没有边界检查,存在缓冲区溢出的问题,因此不推荐使用。
示例代码:
#include <stdio.h>
int main() {
char str[100];
printf("请输入一个字符串:");
gets(str);
printf("您输入的字符串是:%sn", str);
return 0;
}
虽然gets函数比scanf更方便读取整行字符串,但它的安全性较差,容易引发缓冲区溢出等安全问题。因此,在现代C编程中,gets函数已经被弃用。
三、使用fgets函数输入字符串数组
fgets函数是一个更安全的选择,它允许我们指定最大输入长度,从而避免缓冲区溢出。fgets函数会读取包括空格在内的整行字符串,直到遇到换行符或达到指定长度为止。
示例代码:
#include <stdio.h>
int main() {
char str[100];
printf("请输入一个字符串:");
fgets(str, sizeof(str), stdin);
printf("您输入的字符串是:%sn", str);
return 0;
}
在这个示例中,fgets函数会读取最多99个字符,并将其存储到字符数组str中。这样可以有效避免缓冲区溢出问题,同时能够读取包含空格的整行字符串。
四、如何输入字符串数组(二维字符数组)
在实际应用中,我们有时需要输入多个字符串,这时可以使用二维字符数组来存储这些字符串。以下示例展示了如何使用fgets函数来输入多个字符串,并存储到二维字符数组中。
示例代码:
#include <stdio.h>
int main() {
char str[5][100]; // 定义一个二维字符数组,存储5个字符串,每个字符串最多100个字符
int i;
printf("请输入5个字符串:n");
for (i = 0; i < 5; i++) {
printf("字符串 %d:", i + 1);
fgets(str[i], sizeof(str[i]), stdin);
}
printf("n您输入的字符串是:n");
for (i = 0; i < 5; i++) {
printf("字符串 %d:%s", i + 1, str[i]);
}
return 0;
}
在这个示例中,我们定义了一个二维字符数组str,用于存储5个字符串。通过循环,我们使用fgets函数逐一读取每个字符串,并存储到二维字符数组中。最后,通过另一个循环来输出这些字符串。
五、处理多余的换行符
需要注意的是,当使用fgets函数时,输入的字符串末尾可能包含一个换行符。如果我们不希望字符串中包含这个换行符,可以通过以下方法将其去除:
示例代码:
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
printf("请输入一个字符串:");
fgets(str, sizeof(str), stdin);
// 去除换行符
size_t len = strlen(str);
if (len > 0 && str[len-1] == 'n') {
str[len-1] = '