C语言,数组,基础题

以下是题目

img

我写的:

#include
#include
int main()
{
    char a[3][20];
    char b[20],c[20],d[20];
    b[20]=a[0][20];
    c[20]=a[1][20];
    d[20]=a[2][20];
    gets(b);
    gets(c);
    gets(d);
    char largest[20];
    if(strcmp(b,c)>0)
        if(strcmp(d,b)>0)
        strcpy(largest,d);
        else strcpy(largest,b);
        
    else {if(strcmp(d,c)>0)
        strcpy(largest,d);
    else strcpy(largest,c);}
    printf("the largest string is %s\n",largest);
    return 0;
}

无法运行,帮忙找找错,谢谢

7、8、9行下标越界了。

img


我是按你的代码来运行的,可以运行啊,不过要自己在终端输入字符串
望采纳!

img

 /*
    下标20本身就是越界了,
    就算不越界这样赋值也没有任何意义,
    因为把二维数组当摆设了
    b[20]=a[0][20];
    c[20]=a[1][20];
    d[20]=a[2][20];
    */
#include <stdio.h>
#include <string.h>

int main()
{
    char a[3][21];
    char largest[21] = {'\0'};

    fgets(a[0], 20, stdin);
    fgets(a[1], 20, stdin);
    fgets(a[2], 20, stdin);

    if (strcmp(a[0], a[1]) > 0)
    {
        if (strcmp(a[0], a[2]) > 0)
            strcpy(largest, a[0]);
        else
            strcpy(largest, a[2]);
    }
    else
    {
        if (strcmp(a[1], a[2]) > 0)
            strcpy(largest, a[1]);
        else
            strcpy(largest, a[2]);
    }
    printf("the largest string is %s\n", largest);
    return 0;
}