跟踪调试题

来源:百度知道 编辑:UC知道 时间:2024/09/19 16:19:09
#include<stdio.h>
void strncat(char [],char [],int);
void main(void)
{
char a[50]="The adopted symbol is ",b[27]="abcdefghijklmnopqrstuvwxyz";
strncat(a, b, 4);
printf("%s\n",a);
}
void strncat(char s[],char t[], int n)
{
int i = 0, j;
while(s[i++]) ;
for(j = 0; j < n && t[j];)
s[i++] = t[j++];
s[i] = '\0';
}
函数strncat(s,t,n)本来应该将字符数组t的前n个字符连接到字符数组s中字符串的尾部。但函数strncat在定义时代码有误,不能实现上述功能。按下面的要求进行操作,回答问题并排除错误。
(1)单步执行。进入函数strncat后观察表达式s、t和i。当光条落在for语句所在行时,i为何值?当光条落在strncat函数块结束标记(右花括号 })所在行时, s、t分别为何值?
(2)分析函数出错的原因,排除错误,使函数正确实现功能,最后写出程序的输出结果。

while(s[i++]) ;
s[22]='\0',但是当while到i=22时,还会再加一到23了。那么你给其赋值也是无意义的,因为%s输出直到第一个\0就结束了,就是i=22的地方。
i为23;s为\0;t为e
#include<stdio.h>
void strncat(char [],char [],int);
void main(void)
{
char a[50]="The adopted symbol is ",b[27]="abcdefghijklmnopqrstuvwxyz";
strncat(a, b, 4);
printf("%s\n",a);
}
void strncat(char s[],char t[], int n)
{
int i = 0, j;
while(s[i])
i++;
for(j = 0; j < n && t[j];)
s[i++] = t[j++];
s[i] = '\0';
}