如何在C中的二维数组中输入字符串?

问题描述 投票:0回答:4

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

c string multidimensional-array
4个回答
5
投票

有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



4
投票
u 可以使用二维数组读取字符串,而无需使用 getchar(),只需在 scanf(" %[^
]”)
; %[^ 之前
】! 


0
投票
#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; }



0
投票
scanf("%255[^\n]", str[i]);

。相反,您可以使用

scanf
fgets

© www.soinside.com 2019 - 2024. All rights reserved.