如果我想在二维数组中进行输入,其中每个字符串在一行中,下一个字符串在另一行中(即按 Enter 键更改行)。我怎样才能在 C 中做到这一点。C 似乎没有方便的“字符串”处理。我的意思显然是在不使用 getchar() 的情况下这样做。
有3种方法,如下所述。
如果你知道最大字符串数和最大字符数,那么你可以使用下面的方式来声明一个2D字符数组。
char strs[MAX_NO_OF_STRS][MAX_NO_CHARS] = {0};
for (i = 0; i < MAX_NO_OF_STRS; i++)
{
scanf("%s", strs[i]);
}
如果您知道字符串的最大数量,并且您不想通过为所有字符串分配内存来浪费内存。然后寻找字符指针数组。
MAX_NO_CHARS
如果你知道运行时的最大字符串数,你可以声明一个双指针
char temp[MAX_NO_CHARS] = {0};
char *strs[MAX_NO_OF_STRS] = NULL;
for (i = 0; i < MAX_NO_OF_STRS; i++)
{
scanf("%s", temp);
strs[i] = strdup(temp);
}
。从用户那里获取字符串
char
的数量,然后动态分配内存。n
u 可以使用二维数组读取字符串,而无需使用 getchar(),只需在 scanf(" %[^ ]”) ; %[^ 之前 】!
#include<stdio.h>
main()
{
char student_name[5][25];
int i;
for(i=0;i<5;i++)
{
printf("\nEnter a string %d: ",i+1);
scanf(" %[^\n]",student_name[i]);
}
}
并用固定大小的缓冲区填充指针数组的另一种方法是分配一个 2d 数组(在静态存储中或在堆栈上)并填充它。 KingsIndian 修改后的代码示例将如下所示:
malloc
如果您期望获得的所有字符串都不超过某个大小,那么这种方法将使您无需自行释放内存。然而,它不太灵活,这意味着您无法将单个缓冲区的大小调整到它包含的字符串。编辑
添加到注释中的信息,以读取仅由换行符而不是任何空格终止的字符串:
#include <stdio.h>
int main()
{
char str[2][256] = {{0}};
int i = 0;
for(i=0;i<2;i++)
{
scanf("%255s", &str[i][0]);
}
return 0;
}
scanf("%255[^\n]", str[i]);
。相反,您可以使用
scanf
。fgets