问答题 编写函数fun(),其功能是将放在字符数组中的M个字符串(每串的长度不超过N)按顺序合并组成一个新的字符串。
例如,字符数组中的M个字符串如下:
AAAA
BBBBBBB
CC
则合并后的字符串的内容应是:
AAAABBBBBBBCC。
提示:strcat(a,b)的功能是将字符串b复制到字符串a的尾部,成为一个新串。
#include<stdio.h>
#include<string.h>
#define M 3
#define N 20
void fun(char a[M][N],char *b)


main()
char w[M][N]="AAAA","BBBBBBB",
"CC",a[100];
im i;void NONO();
printf("The string:/a");
for(i=0;i<M;i++)puts(w[i]);
printf("/n");
fun(w,a);
printf("The A string:/a");
printf("%s",a);printf("/a/a");


【正确答案】int i,j,k=0;
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
if(*(*(a+i)+j))
/*如果不指向行的尾*/
{
b[k]=*(*(a+i)+j);
/*将行中的值赋值给数组b*/
k++;//数组下标加1
}
else/*如果指向尾,则跳出这一行*/
break;
b[k]='/0';/*数组加尾符*/
}
【答案解析】[解析] 该程序的功能是将放在字符数组中的M个字符串(每串的长度不超过N)按顺序合并组成一个新的字符串。其中,存储在二维字符数组中的每一行都是一个字符串;在每个字符串的结尾处,各有一个字符串结束符'/0'。
①二维字符数组第i行第j列元素a[i][j],就是指针形式的*(*(a+i)+j)。因此,如果字符*(*(a+i)+j)是串的结束符,则说明该字符串已经结束。
②当一维字符数组存放完字符串中各字符后,必须在一维字符数组的尾字符处加一个结束符'/0',才能把字符数组变成字符串;否则,字符数组就只能是非字符串的一般字符数组。
[考点] 数组操作,指针操作。