问答题 下列给定程序中,函数proc()的功能是:将m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt所指字符串中,例如,把2个字符串abc、CD串联起来,结果是abcCD。
请修改程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
//****found****
int proc(char str[][10], int m, char *pt)
{ int k, q, i, j=0;
for(k=0; k<m; k++)
{q=strlen(str[k]);
j+=q;
for(i=0; i<q; i++)
//****found****
pt[i]=str[k, i];
pt+=q;
pt[0]=0;
}
pt-=j;
}
void main()
{ int m, h;
char str[10][10], p[120];
system("CLS");
printf("/nPlease enter m: ");
scanf("%d", &m); gets(str[0]);
printf("/nPlease enter %d string: /n", m);
for(h=0; h<m; h++) gets(str[h]);
proc(str, m, p);
printf("/nThe result is: %s/n", p);
}
【正确答案】
【答案解析】(1)错误:int proc(char str[][10], int m, char *pt)
正确:void proc(char str[][10], int m, char *pt)
(2)错误:pt[i]=str[k, i]
正确:pt[i]=str[k][I] [解析] 由主函数中的函数调用和proc()函数的定义可知,函数proc()没有返回值。因此,“int proc(char str[][10], int m, char *pt)”中的int应改为void;根据C语言的语法规则,二维数组的行下标和列下标应分别加中括号,因此“pt[i]=str[k,i]”应改为“pt[i]=str[k][i]”。