在c中为二维数组赋值

时间:2016-02-21 12:17:42

标签: c arrays gcc char

我写了一段代码,用于找到等于所提供参数之一的连续和。

#include <stdio.h>
#include <string.h>

int main()
{
    //number of test case
    int n;
    int monfri[2];

    scanf("%d",&n);

    char res[n][3] ;
    char yestok[3] = {"YES"};

    int sum = 0;
    int h = 0;

    for(int i = 0 ; i < n; i++)
    {
        h=0;
        //read no of friends and money
        while (h < 2 && scanf("%d", &monfri[h]) == 1)
            h++;

        int fri[monfri[0]];

        for(int j = 0; j < monfri[0]; j++)
            scanf("%d",&fri[j]);


        for(int k = 0; k < monfri[0] ; k++)
        {
            sum = 0;

            for(int l=k+1; l<monfri[0]; l++)
            {
                sum = sum + fri[l - 1];

                if(sum == monfri[1])
                {
                    strcpy (res[i],yestok);
                    continue;
                }

                if(sum > monfri[i])
                    continue;
            }
        }       

        if(strcmp(res[i],yestok) != 0)
        {
            strcpy (res[i],"NO");       
        }

    }

    for(int d = 0; d < n ; d++)
    {
        puts(res[d]);
    }

    return 0;
}

提供相同的输入

2
5 12
2
3
4
5
6
3 15
2
2
2

这里的第一个输入代表我们案例中的测试用例2的

下一个输入表示实际的数据和总和值。在这里

5 12
3 15

预期输出应为

YES
NO

但我得到了

YESNO
NO

我做错了什么。如果没有测试用例是1那么它工作正常。但在2个或更多测试用例中失败。

1 个答案:

答案 0 :(得分:3)

字符串&#34;是&#34;需要4个字符的空间。因此,您必须将yestok的声明更改为

char yestok[4] = {"YES"};

甚至更好,让编译器确定长度:

char yestok[] = {"YES"};

否则,终止NUL字符会丢失,程序会调用未定义的行为。例如,strcmp调用可能会失败。