簡體   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