gets()二维数组

时间:2017-08-07 18:49:18

标签: c++ multidimensional-array

我无法理解以下代码,

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()不适合我想将字符存储为数组中的元素而不是字符串?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

示例:

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

答案 2 :(得分:0)

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

以这种方式考虑它,我想存储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,则输出将是&#39;。

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

gets()调用有一些功能,如果不监视输入,可能会导致缓冲区溢出问题。