如何在C中输入2d数组中的字符串?

时间:2013-01-26 10:40:15

标签: c string multidimensional-array

如果我想在一个二维数组中输入一个输入,每个字符串在一行中,而另一个输入在另一行中(即按Enter键时更改行)。我怎么能在C中做到这一点.C似乎没有方便的“字符串”处理。我显然是在不使用getchar()的情况下这样做。

3 个答案:

答案 0 :(得分:3)

下面提到了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指针。

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的数量,然后动态分配内存。

char temp[MAX_NO_CHARS] = {0};
char **strs = NULL;
int n = 0;
scanf("%d", &n);
strs = malloc(sizeof(char*) * n);
for (i = 0; i < n; i++)
{
    scanf("%s", temp);
    strs[i] = strdup(temp);
}

答案 1 :(得分:3)

#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数组读取字符串而不使用getchar()通过在scanf中放置空格(“%[^ \ n]”) ;在%[^ \ n]之前!

答案 2 :(得分:0)

使用malloc并使用固定大小的缓冲区填充指针数组的替代方法是分配2d数组(在静态存储中或堆栈上)并填充它。 KingsIndian修改后的代码示例将如下所示:

#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]);