繁体   English   中英

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

[英]How to input a string in a 2d array in C?

如果我想在二维数组中输入一个字符串,则每个字符串在一行中,另一字符串在另一行中(即按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指针数组。

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

}

您可以通过在scanf(“%[^ \\ n]”)中放置空格来在不使用getchar()的情况下使用2d数组读取字符串; 在%[^ \\ n]之前!

使用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]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM