gets() 二维数组

gets() two dimensional array

本文关键字:二维数组 gets      更新时间:2023-10-16

我无法理解以下代码,

static char s[N][N];
int i = 0;
while( gets(s[i]) )
{ some loop, where i gets incremented }

考虑到数组是 N 维的,那么当

gets(s)

叫?它如何将整个字符串存储在 s[i] 元素中?感觉 s[i] 应该等于输入的第一个字符,而不是整个字符串。当它循环使用更多输入时会发生什么?关键是要将其存储为

[char, char, char, char]
[char, char, char, char, char]
[char, char, char, char, char, char]
... and so forth

这似乎是代码目前正在做的事情。但我不明白怎么做。

编辑 #1

很多人建议反对使用 gets((,但是当没有非法输入并且我想将字符存储为数组中的元素而不是字符串时,为什么 gets(( 不合适?

s[i]元素是一个字符数组,因为s是一个数组数组。字符数组可用于存储字符串,方法是使用零字符(称为"nul"(来标记结尾。

上面的代码存储字符串,但带有编号索引。 但是将该数字索引存储在数组的第一维中。

这样想,我想存储 10 个最大大小为 256 个字符的字符串:

int main()
{
char s[10][256];
for (int i = 0; i < 10; i++ ) {
gets(s[i]);
}
for (int i = 0; i < 10; i++ ) {
cout << s[i] << endl;
}
}
cout << s[1][2] << endl;

注意:对于上面代码的最后一行,它将输出第二个条目(我们对 0-9 的所有内容进行排序(和该条目处字符串的第三个字符。 因此,如果我的条目是 test2,那么输出将是"s"。

注意:调用 gets(s( 是不正确的,因为它不会编译并且不是代码的意图。

gets(( 调用具有一些功能,如果不监视输入,可能会使您陷入缓冲区溢出问题。

示例:

int multi_array[2][2] = {{2,3,4},
{7,8,9},
{1,5,0}};

Array[n][m]

得到 第一名Array[0][0]

第二名Array[0][1]

位置 0,1 是 3

位置 1,2 是 9

位置 2,2,为 0