发送2D数组作为争论

时间:2018-10-28 10:43:54

标签: c++ c function arguments kernighan-and-ritchie

1234ould
1234567必须
12ould

我想要做的是将一排上面的2D数组作为“ strindex()”的参数传递给它,该索引返回“ ould”恰好在行中的索引,如果不是,则返回-1 。然后,将该索引值分配给数组“ q []”的元素。当所有行完成时,则打印出所有行中最“出现”的索引。

int strindex(char s[],char t[])
{   int i,j,k;
    for(i=0;s[i]!='\0';++i)
    {   for(j=i,k=0;t[k]!='\0'&&t[k]==s[j];k++,j++)
            ;
        if(k>0 && t[k]=='\0')
            return i;
    }
    return -1;
}

int getline(char s[],int lim)
{   int i,c;
    i=0;
    while((--lim)>0 && (c=getchar())!=EOF && c!='\n')
        s[i++]=c;
    if(c=='\n')
        s[i++]='\n';
    s[i]='\0';
    return i;
}

void main(void)
{   char line[MAXLIM],p[10][MAXLIM];
    int i=0,j=0,k=0,q[10],max;
    while((getline(line,MAXLIM))>0)
    {   for(;j<strlen(line);j++)
        {   p[i][j] = line[j];
        }
i++;
}
***max=0;
for(;k<i;++k)
{       
    q[k]=strindex(p[k],pattern);

    if(q[k]>max)
    {   
        max=q[k];
    }***
}


getch();
clrscr();

}

但是当我调试程序时,它在分配max = 4的第一行中可以正确运行,但是在我看到q [k]的值后,两行都被分配为-1,从而破坏了我的程序。 重要说明:strindex()第一个参数采用一维数组,因此我写的是p [k]而不是p [k] []。 重要说明:***是程序的主要部分。

1 个答案:

答案 0 :(得分:0)

line的第一个循环中将p[i]复制到main时,j未设置为零。在第一个循环开始之前将其设置为零,但是第一次复制将递增j,并保持此递增值,因此在下一次尝试复制行时不为零。

此外,该代码无法确保复制到p[i]的每一行都以空字符结尾。