请大家帮我分析个C程序问题!

来源:百度知道 编辑:UC知道 时间:2024/05/18 00:07:56
请补充函数fun(),该函数的功能是:把从主函数中输入的字符串str2倒置后接在字符串str1后面。
例如:str1="How do",str2="?od uoy",结果输出:"How do you do?"。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。
试题程序:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define N 40
void fun(char *str1,char *str2)
{
int i=0,j=0,k=0,n;
char ch;
char *p1=str1;
char *p2=str2;
while(*(p1+i))
i++;
while(*(p2+j))
j++;
n=【1】; (j--)
for(;k<=j/2;k++,j--)
{
ch=*(p2+k);
*(p2+k)=*(p2+j);
*(p2+j)=ch;
}
【2】; (*p2+n)='\0')
for(;【3】;i++) (*p2)
*(p1+i)=*p2++;
*(p1+i)='\0';
}
void main()
{
char str1[N],str2[N];
system("CLS");
printf("***Input the string str1 & str2
***\n");
printf(&q

程序我看了一次,没调试. 对于程序的变量名命实在是不敢恭维, 估计只有哪些故意给考生制造视觉麻烦的考题才会这样命名.

1.变量n 是*str2字符串的长度 n=j-- 实际上是n=j ;j=j-1

第一个for 是奖*str 的前半部分和后半部分交换.

2. *(p1+i)=*p2++; 这一句, 你应该注意这时的i的值是多少,这时i的值实际上隔得老远,就是在最上面的*str1 的长度.
知道了i的值,这句实际的作用就很好理解了.就是在p1(也就是传进来的str1)的未尾接上p2的第一个字符,然后循环,接下去,循环p2(*str2 的长度)次,
3.*(p1+i)='\0'; 也就是在循环过程中,始终把最后一位作为结束符(C里的字符串实际上是字符数组,数组的最后一位是'\0'表示结束,如果你不加\0,当你读这个字符串时,就不知道在什么地方结束,有可能读到内存中的其它变量里去了,造成一些不必要的错误,这也是C 的程序安全性被批评得比较多的地方,虽灵活,但是不安全,使用时根注意,好像扯远了.
话说回来,我觉得这句不应该放在循环内,而应该放在循环外,在循环完了指定一下字符串的结束就可以了,没必根每次循环都指定一次,不过也可能是我没看懂作者的意思.

4. 哪两个while 语名实际上的作用就是获取字符串的长度.但是我觉得这样写不好,可能有潜在的不可预知的错误. 当然是个人意见,也许是我水平不够,毕竟我好久没写过C语言了.